使用-fPIC重新编译log4cxx



我正在编译一个使用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这样的构建系统,还是手动指定编译器选项

最新更新