Open szl-926929 opened 3 years ago
/usr/local/go/pkg/tool/linux_amd64/link: running gcc failed: exit status 1
/bin/ld: /home/xxxx/go/pkg/mod/github.com/valyala/gozstd@v1.11.0/libzstd_linux_amd64.a(zdict.o): relocation R_X86_64_PC32 against symbol stderr@@GLIBC_2.2.5' can not be used when making a PDE object; recompile with -fPIC /bin/ld: /home/xxxx/go/pkg/mod/github.com/valyala/gozstd@v1.11.0/libzstd_linux_amd64.a(fastcover.o): relocation R_X86_64_PC32 against symbol
stderr@@GLIBC_2.2.5' can not be used when making a PDE object; recompile with -fPIC
/bin/ld: /home/xxxx/go/pkg/mod/github.com/valyala/gozstd@v1.11.0/libzstd_linux_amd64.a(cover.o): relocation R_X86_64_PC32 against symbol `stderr@@GLIBC_2.2.5' can not be used when making a PDE object; recompile with -fPIC
/bin/ld: final link failed: nonrepresentable section on output
collect2: error: ld returned 1 exit status
also hitting this issue, only reproducible on linux, works fine on darwin, both arm64 and amd64
/usr/bin/ld: /go/pkg/mod/github.com/valyala/gozstd@v1.17.0/libzstd_linux_amd64.a(cover.o): warning: relocation against `stderr@@GLIBC_2.2.5' in read-only section `.text'
/usr/bin/ld: /go/pkg/mod/github.com/valyala/gozstd@v1.17.0/libzstd_linux_amd64.a(zdict.o): relocation R_X86_64_PC32 against symbol `stderr@@GLIBC_2.2.5' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: bad value
clang: error: linker command failed with exit code 1 (use -v to see invocation)
easy to reproduce with just
package main
// #cgo CFLAGS: -fPIC
import "C"
import "github.com/valyala/gozstd"
//export Compress
func Compress(msg *C.char) *C.char {
input := []byte(C.GoString(msg))
output := gozstd.Compress(nil, input)
return C.CString(string(output))
}
func main() {}
then
go build -o zstd.so -buildmode=c-shared .
note: the cgo directive doesn't work, I just added as the error message suggested, but it makes no difference
alright, issue found, the c archive for linux amd64 wasn't built with -fPIC
as the gcc error says
as a workaround you can clone this repo, rebuild the .a
file for your platform, and go mod edit -replace
the dependency on your project with the cloned one
example
git clone https://github.com/valyala/gozstd.git ../gozstd
cd ../gozstd
git checkout v1.17.0 # or whatever release you want # could be parsed from go.mod
MOREFLAGS=-fPIC make clean libzstd.a
cd - # wherever your package is
go mod edit -replace github.com/valyala/gozstd=../gozstd
now the build works like a charm 🙂
now... is this a bug when the .a
files where generated and committed to this repo? or is there some intention behind the lack of the -fPIC
flag? I'd lie if I'd say that I fully understand how all this works, so I'm not sure what's the best way to address this issue
@valyala sorry for the tag, but it would be really nice to get your input
I guess that a pr from me updating the .a
file won't be accepted, right?
I guess there wouldn't be any way of verifying that it hasn't been tampered with, or it doesn't introduce some issue for other users
alright, issue found, the c archive for linux amd64 wasn't built with
-fPIC
as the gcc error says as a workaround you can clone this repo, rebuild the.a
file for your platform, andgo mod edit -replace
the dependency on your project with the cloned oneexample
git clone https://github.com/valyala/gozstd.git ../gozstd cd ../gozstd git checkout v1.17.0 # or whatever release you want # could be parsed from go.mod MOREFLAGS=-fPIC make clean libzstd.a cd - # wherever your package is go mod edit -replace github.com/valyala/gozstd=../gozstd
now the build works like a charm 🙂
now... is this a bug when the
.a
files where generated and committed to this repo? or is there some intention behind the lack of the-fPIC
flag? I'd lie if I'd say that I fully understand how all this works, so I'm not sure what's the best way to address this issue@valyala sorry for the tag, but it would be really nice to get your input I guess that a pr from me updating the
.a
file won't be accepted, right? I guess there wouldn't be any way of verifying that it hasn't been tampered with, or it doesn't introduce some issue for other users
I got this error when I want to execute this command
Cleaning library completed
CC obj/conf_6d8c1dc6b1841212cc254358d8403b5f/static/debug.o
cc: internal compiler error: Segmentation fault (program as)
Please submit a full bug report,
with preprocessed source if appropriate.
See <file:///usr/share/doc/gcc-6/README.Bugs> for instructions.
Makefile:210: recipe for target 'obj/conf_6d8c1dc6b1841212cc254358d8403b5f/static/debug.o' failed
make[2]: *** [obj/conf_6d8c1dc6b1841212cc254358d8403b5f/static/debug.o] Error 4
Makefile:107: recipe for target 'libzstd.a' failed
make[1]: *** [libzstd.a] Error 2
make[1]: Leaving directory '/data00/home/gaopengyang/project/github/gozstd/zstd/lib'
Makefile:15: recipe for target 'libzstd_linux_amd64.a' failed
make: *** [libzstd_linux_amd64.a] Error 2
My go version: 1.18 Gcc Version: gcc version 6.3.0 20170516 (Debian 6.3.0-18+deb9u1)
alright, issue found, the c archive for linux amd64 wasn't built with
-fPIC
as the gcc error says as a workaround you can clone this repo, rebuild the.a
file for your platform, andgo mod edit -replace
the dependency on your project with the cloned one examplegit clone https://github.com/valyala/gozstd.git ../gozstd cd ../gozstd git checkout v1.17.0 # or whatever release you want # could be parsed from go.mod MOREFLAGS=-fPIC make clean libzstd.a cd - # wherever your package is go mod edit -replace github.com/valyala/gozstd=../gozstd
now the build works like a charm 🙂 now... is this a bug when the
.a
files where generated and committed to this repo? or is there some intention behind the lack of the-fPIC
flag? I'd lie if I'd say that I fully understand how all this works, so I'm not sure what's the best way to address this issue @valyala sorry for the tag, but it would be really nice to get your input I guess that a pr from me updating the.a
file won't be accepted, right? I guess there wouldn't be any way of verifying that it hasn't been tampered with, or it doesn't introduce some issue for other usersI got this error when I want to execute this command
Cleaning library completed CC obj/conf_6d8c1dc6b1841212cc254358d8403b5f/static/debug.o cc: internal compiler error: Segmentation fault (program as) Please submit a full bug report, with preprocessed source if appropriate. See <file:///usr/share/doc/gcc-6/README.Bugs> for instructions. Makefile:210: recipe for target 'obj/conf_6d8c1dc6b1841212cc254358d8403b5f/static/debug.o' failed make[2]: *** [obj/conf_6d8c1dc6b1841212cc254358d8403b5f/static/debug.o] Error 4 Makefile:107: recipe for target 'libzstd.a' failed make[1]: *** [libzstd.a] Error 2 make[1]: Leaving directory '/data00/home/gaopengyang/project/github/gozstd/zstd/lib' Makefile:15: recipe for target 'libzstd_linux_amd64.a' failed make: *** [libzstd_linux_amd64.a] Error 2
My go version: 1.18 Gcc Version: gcc version 6.3.0 20170516 (Debian 6.3.0-18+deb9u1)
There is a problem with my GCC. I will fix it after reinstalling OS
os: centos 7 want to compile into a C library with CGo, but get error: /usr/lib/golang/pkg/tool/linux_amd64/link: running gcc failed: exit status 1 /bin/ld: /home/lcsuper/kong-zstd-go/vendor/github.com/valyala/gozstd/libzstd_linux_amd64.a(zdict.o): relocation R_X86_64_PC32 against symbol `stderr@@GLIBC_2.2.5' can not be used when making a shared object; recompile with -fPIC /bin/ld: final link failed: Bad value collect2: error: ld returned 1 exit status