log4cxx 使用 -fPIC 重新编译

log4cxx recompile with -fPIC

提问人:Karim Harbaoui 提问时间:1/7/2022 更新时间:1/8/2022 访问量:166

问:

我正在编译一个使用 log4cxx 库的共享库 (.so)。我收到以下错误:

liblog4cxx.a(level.o): relocation R_X86_64_32 against `.bss' can not be used when making a shared object; recompile with -fPIC

你有什么想法吗?我应该使用一些特殊选项重新编译 log4cxx 吗?

C++ 链接器 .so log4cxx fpic

评论


答:

0赞 Jakob Stark 1/8/2022 #1

您正在尝试将共享库链接到静态库 (),这不起作用,因为共享库的所有成分都必须使用(位置无关代码)选项进行编译。静态库(通常与文件后缀一起显示)通常不使用此选项进行编译。liblog4cxx.a-fPIC*.a

您的问题可能是由两个不同的问题引起的。要么是 liblog4cxx 库也作为共享库存在,但您的链接器不知何故找不到它并尝试使用静态库,要么您的安装中缺少 liblog4cxx 的共享版本。

因此,我建议查找文件所在的路径(例如,如果您将库安装在自定义目录中,则在另一个目录中),然后在同一目录中查找。如果找到共享版本,可以尝试使用 显式指定链接器的路径。liblog4cxx.a/usr/libliblog4cxx.so-l/full/path/to/your/liblog4cxx.so

如果没有库的共享版本,恐怕您必须重新配置它以生成共享库并重新编译它。

为了获得更具体的帮助,您应该提供更多背景信息,因为 c++ 库和项目的构建过程高度依赖于系统。所以尽量提供信息

  • 您正在哪种操作系统上开发?(Windows、特殊的 Linux 发行版或 iOS)
  • 您是自己编译 liblog4cxx 还是使用预编译版本
  • 如果您自己编译,您将哪些选项传递给配置系统?
  • 你们的构建过程是怎样的?您使用的是 cmake 等构建系统,还是手动指定编译器选项?

评论

0赞 Karim Harbaoui 1/11/2022
谢谢你的回答。我将尝试使用 -fPIC 选项重新编译 .a lib。