当前位置: 首页 > 面试题库 >

“针对的重定位R_X86_64_32S”链接错误

平羽
2023-03-14
问题内容

我正在尝试将静态库链接到共享库,但出现以下错误

/ usr / bin / ld:../../../libraries/log4cplus/liblog4cplus.a(fileappender.o):在创建共享库时,不能将R_X86_64_32S相对于“本地符号”进行重定位;用-fPIC重新编译
../../../libraries/log4cplus/liblog4cplus.a:无法读取符号:错误值
collect2:ldhtml" target="_blank">返回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:

  1. unzip log4cplus-1.1.0.zip
  2. ./configure --enable-static=yes --enable-threads=yes
  3. vi Makefile 并将-fPIC添加到CXXFLAGS和CFLAGS
  4. make

然后用于编译我的共享库:

  1. g++ -frtti -w -c -fPIC -I"Include_Directory" myfile.cpp
  2. 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并改用该版本。



 类似资料:
  • 我尝试了这里建议的标志,但没有成功。 并将-fpic添加到CXXFLAGS和cflags

  • 可能重复: 什么是未定义的引用/未解决的外部符号错误,如何修复? 试图通过 我得到一个错误: main.cpp 搞砸h文件: 有什么想法吗?使用此函数构建具有设置大小的哈希表。 编辑:散列。cpp文件 正在尝试通过以下终端进行编译: g-c Hash.cpp-o Hash. o g-omain.cpphash. o-std=c 0x 不知怎的,它进入了一个无限循环。

  • 我正在Linux中使用NASM编译器编译一个NASM 64位共享对象,并与ld链接。它使用以下字符串编译为对象文件: 我与ld链接: 我得到以下错误: 不幸的是,NASM编译器没有-fPIC选项。 在阅读了许多关于在Linux中为64位共享库编写位置独立代码的资源后,我非常理解这个问题,但我仍然不清楚要在64位NASM中实现位置独立需要做哪些指令更改。例如,所有涉及命名变量的指令都需要是“rel”

  • 问题内容: 我正在尝试重定向我的响应,但是我被困在链接路径上。 以下命令将我带到tomcat的localhost并在此处搜索页面,但是按预期找不到任何内容。 为了解决此问题,我必须将我的根文件夹名称(来自webaps的名称)放在链接路径中,但是我认为这不是一个好主意。 为什么会这样呢?除了getRequestURL()或类似的方法,还有其他解决方法吗? 问题答案: 相对重定向URL相对于当前请求U

  • 可能重复: 什么是未定义的引用/未解决的外部符号错误以及如何修复它? 尝试通过编译我的程序 我得到了错误: 不知怎么会进入一个无限循环。