如何使用 -fPIC 标志重建 libiberty.a

How to rebuild libiberty.a with -fPIC flag

编译 mlpack 时出现以下链接错误:

[ 37%] Linking CXX shared library ../../lib/libmlpack.so
/usr/bin/ld: /usr/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../lib/libiberty.a(cplus-dem.o): warning: relocation against `libiberty_demanglers' in read-only section `.text'
/usr/bin/ld: /usr/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../lib/libiberty.a(cp-demangle.o): relocation R_X86_64_PC32 against symbol `cplus_demangle_builtin_types' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: bad value
collect2: error: ld returned 1 exit status
make[2]: *** [src/mlpack/CMakeFiles/mlpack.dir/build.make:1040: lib/libmlpack.so.3.4] Error 1
make[1]: *** [CMakeFiles/Makefile2:2106: src/mlpack/CMakeFiles/mlpack.dir/all] Error 2
make: *** [Makefile:146: all] Error 2

看来我需要使用 -fPIC 标志重新编译 libiberty.a 库。我该怎么做?

我在这个问题上找到了 bug report。在我的例子中,我能够通过降级一些包来解决问题(如报告中所述):

  • binutils 2.36.1-3
  • gcc 11.1.0-3
  • gcc-libs 11.1.0-3
  • gcc fortran-11.1.0-3

最终应该在 binutils 更新时解决这个问题。