“针对的重定位R_X86_64_32S”链接错误
我正在尝试将静态库链接到共享库,但出现以下错误
/ usr / bin / ld:../../../libraries/log4cplus/liblog4cplus.a(fileappender.o):在创建共享库时,不能将R_X86_64_32S相对于“本地符号”进行重定位;用-fPIC重新编译../../../libraries/log4cplus/liblog4cplus.a:无法读取符号:错误值
collect2:ld返回1退出状态
但这可以在32位计算机上工作,而不会出现任何此类错误。我尝试将-fPIC
标记手动添加到Makefile中也不能解决问题
我-whole-archive
按照这里的建议尝试了该标志,但没有成功。
/ usr / bin / ld:../../../libraries/log4cplus/liblog4cplus.a(appenderattachableimpl.o):针对`vtable for log4cplus :: spi :: AppenderAttachable'重定位R_X86_64_32S共享对象 用-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
回答:
假设您正在生成一个共享库,最有可能发生的事情是liblog4cplus.a
您使用的变体未使用进行编译-fPIC
。在linux中,您可以通过从静态库中提取目标文件并检查其重定位来确认这一点:
ar -x liblog4cplus.a readelf --relocs fileappender.o | egrep '(GOT|PLT|JU?MP_SLOT)'
如果输出为空,则静态库与位置无关,并且不能用于生成共享库。
由于静态库包含已编译的目标代码,因此提供-fPIC标志将无济于事。
您需要使用liblog4cplus.a
编译的版本,-fPIC
并改用该版本。
以上是 “针对的重定位R_X86_64_32S”链接错误 的全部内容, 来源链接: utcz.com/qa/402170.html