符号从一种编译器版本重定位到另一种版本

时间:2019-07-16 09:17:24

标签: gcc linker g++ fpic

我正在编译一个静态库,我们称它为static.a,之后它由共享库shared.so和最终的可执行二进制文件(shared.so仅使用static.a中的一些函数)链接这可以进一步细分)。如果我尝试使用gcc 7.4进行编译,则会收到此链接器错误:

/usr/bin/ld: ../../static.a(file.cpp.o): relocation R_X86_64_TPOFF32 against symbol `_ZGVZN6spdlog7details2os9thread_idEvE3tid' can not be used when making a shared object; recompile with -fPIC

我决定也尝试使用gcc 9.1,并且不再出现此错误。

  1. 在构建将在共享库中使用的静态库时,我应该始终使用-fpic吗?我知道fpic会增加一些开销。
  2. gcc的较新版本如何在共享库中重新定位static.a的符号?这样安全吗?

谢谢。

0 个答案:

没有答案