我正在尝试将静态库链接到共享库,但出现以下错误
/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 也没有解决问题
我按照这里的建议尝试了该-whole-archive
标志,但没有成功。
/usr/bin/ld: ../../../libraries/log4cplus/liblog4cplus.a(appenderattachableimpl.o): 重定位 R_X86_64_32S 对 `vtable for log4cplus::spi::AppenderAttachable' 无法使用共享对象;使用 -fPIC 重新编译 ../../../libraries/log4cplus/liblog4cplus.a(appenderattachableimpl.o):无法读取符号:错误值 collect2: ld 返回 1 个退出状态
创建 liblog4cplus.a:
unzip log4cplus-1.1.0.zip
./configure --enable-static=yes --enable-threads=yes
vi Makefile
并将 -fPIC 添加到 CXXFLAGS 和 CFLAGSmake
然后编译我的共享库:
g++ -frtti -w -c -fPIC -I"Include_Directory" myfile.cpp
g++ -shared -fPIC -frtti -I"Include_Directory" -o mysofile.so myfile.o -Wl,--whole-archive "../../../libraries/log4cplus/liblog4cplus.a" -Wl,--no-whole-archive -ldl