У меня есть проблема ссылка libgcc в статический связанный .soпочему косяк ссылка 64bit статический libgcc на убунту
это происходит только при соединении модуля 64-битного с -m64
Ubuntu 64bit 12,10 GCC 4.7
также не на Ubuntu 64bit 12,04 GCC 4,6
32bit без проблем
$gcc -fPIC -c -o hello.o hello.c -m32
$gcc -shared -m32 hello.o -o libhello.so -static-libgcc -Wl,-Bstatic -lc
$ ldd libhello.so
statically linked
64bit не удалось
$ make
gcc -fPIC -c -o hello.o hello.c
gcc -shared -m64 hello.o -o libhello.so -static-libgcc -Wl,-Bstatic -lc
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/libc.a(iofclose.o): relocation R_X86_64_32 against `__gcc_personality_v0' can not be used when making a shared object; recompile with -fPIC
/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/libc.a: could not read symbols: Bad value
collect2: error: ld returned 1 exit status
make: *** [libhello.so] Error 1
hello.c
#include <stdio.h>
int f(){
FILE *out = fopen("/tmp/x.log", "wb");
fclose(out);
return 1;
}
Makefile
all: libhello.so
libhello.so: hello.o
gcc -shared -m64 hello.o -o libhello.so -static-libgcc -Wl,-Bstatic -lc
hello.o: hello.c
gcc -fPIC -c -o hello.o hello.c
clean:
rm -f hello.o libhello.so
В соответствии с [настоящей статьей] (http://www.gentoo.org/proj/en/base/amd64/howtos/index.xml?part=1&chap=3) это означает, что «libc.a» не был скомпилирован с -fPIC, но должен быть статически связан в библиотеке -fPIC. – BeniBela
Если вы компилируете на 64-разрядную машину, не можете ли вы опустить флаг -m64? Это поможет? –
@RandallCook такая же ошибка – farmer1992