100分求解: g++编译输出.so连接.a文件出错
xinde 2013-04-07 08:48:58 有一静态库文件为libtest.a, 现在需要写一个程序来加载该.a库,执行下列编译命令时出错:
$g++ -fPIC calltest.cpp (编译calltest.cpp 得到 .o )
$g++ -shared -o libcalltest.so calltest.o -fPIC -I./ -L./ -ltest -ldl
(出错如下:)
/usr/bin/ld: .//libtest.a(test1.o): relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC
.//libtest.a: could not read symbols: Bad value
collect2: ld returned 1 exit status
说明: libtest.a是有几个.o文件(如test1.o) ar得来的. 我写一个程序单独来call libtest.a,编译成可执行文件,编译通过,执行test也正常,编译命令如下.
g++ main.cpp -o test -fPIC -I./ -L./ -ltest -ldl
请各位大侠帮忙解答一下$g++ -shared -o libcalltest.so calltest.o -fPIC -I./ -L./ -ltest -ldl 出错原因