提问人:Karim Harbaoui 提问时间:1/7/2022 更新时间:1/8/2022 访问量:166
log4cxx 使用 -fPIC 重新编译
log4cxx recompile with -fPIC
问:
我正在编译一个使用 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 吗?
答:
0赞
Jakob Stark
1/8/2022
#1
您正在尝试将共享库链接到静态库 (),这不起作用,因为共享库的所有成分都必须使用(位置无关代码)选项进行编译。静态库(通常与文件后缀一起显示)通常不使用此选项进行编译。liblog4cxx.a
-fPIC
*.a
您的问题可能是由两个不同的问题引起的。要么是 liblog4cxx 库也作为共享库存在,但您的链接器不知何故找不到它并尝试使用静态库,要么您的安装中缺少 liblog4cxx 的共享版本。
因此,我建议查找文件所在的路径(例如,如果您将库安装在自定义目录中,则在另一个目录中),然后在同一目录中查找。如果找到共享版本,可以尝试使用 显式指定链接器的路径。liblog4cxx.a
/usr/lib
liblog4cxx.so
-l/full/path/to/your/liblog4cxx.so
如果没有库的共享版本,恐怕您必须重新配置它以生成共享库并重新编译它。
为了获得更具体的帮助,您应该提供更多背景信息,因为 c++ 库和项目的构建过程高度依赖于系统。所以尽量提供信息
- 您正在哪种操作系统上开发?(Windows、特殊的 Linux 发行版或 iOS)
- 您是自己编译 liblog4cxx 还是使用预编译版本
- 如果您自己编译,您将哪些选项传递给配置系统?
- 你们的构建过程是怎样的?您使用的是 cmake 等构建系统,还是手动指定编译器选项?
评论
0赞
Karim Harbaoui
1/11/2022
谢谢你的回答。我将尝试使用 -fPIC 选项重新编译 .a lib。
评论