问题
When trying to link with gccgo on Precise, I get this linking error:
matt@matt-1005P:~/src/gopath/src/meme$ gccgo cmd/meme/main.go -o meme
/usr/bin/ld: cannot find -lgcc_s
collect2: error: ld returned 1 exit status
There are reports of this error, but no clean solutions. How do I fix it?
gccgo (Ubuntu/Linaro 4.7.0-0ubuntu4) 4.7.0
Linux matt-1005P 3.2.0-24-generic-pae #38-Ubuntu SMP Tue May 1 16:40:26 UTC 2012 i686 i686 i386 GNU/Linux
回答1:
This was recently brought up on the golang-nuts group: compiling with gccgo from packaged binaries.
It's a known issue in Ubuntu (Bug #966570). To work around it, you can link with the static libgcc by specifying -static-libgcc
in the gccgoflags. i.e.
go build -compiler gccgo -gccgoflags '-static-libgcc'
回答2:
From what I can tell, it's because gccgo is based on GCC 4.7, but Precise uses GCC 4.6 by default. For whatever reason, the library paths are incorrect, or the package is incomplete because it's missing libgcc_s
.
I located possible libraries with find / -name 'libgcc_s*'
and passed the library path like so:
go install -compiler=gccgo -gccgoflags -L/usr/lib/gcc/i686-linux-gnu/4.6 meme/cmd/meme
Note that this is linking against 4.6's libgcc_s
, but seems to work anyway.
回答3:
/usr/bin/ld: cannot find -lgcc_s (cannot find lgcc_s.so)
gccgo -v (we gcc version 4.7.0 (Ubuntu/Linaro 4.7.0-1ubuntu5) )
locate libgcc_s.so.1
/lib/i386-linux-gnu/libgcc_s.so.1
ln -sf /lib/i386-linux-gnu/libgcc_s.so.1 /usr/lib/gcc/i686-linux-gnu/4.7.0/libgcc_s.so
OK
来源:https://stackoverflow.com/questions/10578125/gccgo-on-precise