我正在编译一个使用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吗?
您正试图将共享库链接到静态库(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这样的构建系统,还是手动指定编译器选项