当前位置: 首页 > 知识库问答 >
问题:

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

后树
2023-03-14
/usr/bin/ld: ../../../libraries/log4cplus/liblog4cplus.a(fileappender.o): relocation R_X86_64_32S against `a local symbol' can not be used when making a shared object; recompile with -fPIC
../../../libraries/log4cplus/liblog4cplus.a: could not read symbols: Bad value
collect2: ld returned 1 exit status

我尝试了这里建议的-wolute-archive标志,但没有成功。

 
/usr/bin/ld: ../../../libraries/log4cplus/liblog4cplus.a(appenderattachableimpl.o): relocation R_X86_64_32S against `vtable for log4cplus::spi::AppenderAttachable' can not be used when making a shared object; recompile with -fPIC
../../../libraries/log4cplus/liblog4cplus.a(appenderattachableimpl.o): could not read symbols: Bad value
collect2: ld returned 1 exit status
  1. 解压缩log4cplus-1.1.0.zip
  2. 。/configure--enable-static=yes--enable-threads=yes
  3. vi Makefile并将-fpic添加到CXXFLAGS和cflags
  4. 制作
  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,--golute-archive“../../..//../libraries/log4cplus/liblog4cplus.a”-wl,--no-golute-archive-ldl

共有1个答案

邵文乐
2023-03-14

假设您正在生成一个共享库,最有可能发生的情况是您使用的liblog4cplus.a的变体没有用-fpic编译。在linux中,您可以通过从静态库中提取对象文件并检查它们的重新定位来确认这一点:

ar -x liblog4cplus.a  
readelf --relocs fileappender.o | egrep '(GOT|PLT|JU?MP_SLOT)'

如果输出为空,则静态库不与位置无关,不能用于生成共享对象。

由于静态库包含已经编译过的目标代码,因此提供-fpic标志没有任何帮助。

 类似资料:
  • 问题内容: 我正在尝试将静态库链接到共享库,但出现以下错误 但这可以在32位计算机上工作,而不会出现任何此类错误。我尝试将标记手动添加到Makefile中也不能解决问题 我按照这里的建议尝试了该标志,但没有成功。 创建liblog4cplus.a: 并将-fPIC添加到CXXFLAGS和CFLAGS 然后用于编译我的共享库: 问题答案: 假设您正在生成一个共享库,最有可能发生的事情是您使用的变体未

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

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

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

  • 当响应为5xx时,我想在等待10秒后重试请求3次。但我看不到一个我能用的方法。在对象上 吾见方法: 在有重试计数但无延迟的条件下重试 有退避和次数但没有条件的重试 还有一个,但我不确定如何使用它

  • 我想要“数字”