【发布时间】:2013-11-15 02:29:30
【问题描述】:
我正在尝试将静态库链接到共享库,但出现以下错误
/usr/bin/ld: ../../../libraries/log4cplus/liblog4cplus.a(fileappender.o): 重定位 R_X86_64_32S 反对 `a local symbol' 在制作共享对象时不能使用;使用 -fPIC 重新编译 ../../../libraries/log4cplus/liblog4cplus.a:无法读取符号:错误值 collect2: ld 返回 1 个退出状态但这在 32 位机器上工作,没有任何此类错误。我尝试手动将 -fPIC 标志添加到 Makefile 中,但也没有解决问题
我按照here 的建议尝试了-whole-archive 标志,但没有成功。
创建 liblog4cplus.a:
unzip log4cplus-1.1.0.zip./configure --enable-static=yes --enable-threads=yes-
vi Makefile并将 -fPIC 添加到 CXXFLAGS 和 CFLAGS make
然后编译我的共享库:
g++ -frtti -w -c -fPIC -I"Include_Directory" myfile.cppg++ -shared -fPIC -frtti -I"Include_Directory" -o mysofile.so myfile.o -Wl,--whole-archive "../../../libraries/log4cplus/liblog4cplus.a" -Wl,--no-whole-archive -ldl
【问题讨论】:
-
你能粘贴完整的命令行吗?如果您确切地指出“将静态库链接到共享库”的含义,那也很好。您是从静态库中生成共享库吗?
-
@MichaelFoukarakis 不是真的...
-
对于那些将来要问的人:有时这只是由于发行版更改而发生的,可以通过快速清理构建目录来解决。
标签: c++ linux shared-libraries static-libraries