我想链接到一些外部静态库,让我们说somelib
。我试图通过cmake中的FIND_LIBRARY
执行此操作,它似乎正常工作 - cmake找到libsomelib.a
但是链接存在问题:
(somelib.o): relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC
我确信somelib
是在启用PIC的情况下编译的。一些有趣的事情:
file somelib.o
显示FpgaPicAPI.o: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped
,这是我项目的一个目标文件file
的{{1}}输出。ELF 64-bit LSB relocatable, x86-64, version 1 (GNU/Linux), not stripped
。据我所知,SYSV
表示“此目标文件不使用任何特定于操作系统的功能”但是我可以将这些目标文件与不同的OS / ABI链接吗?第二件事是编译器版本:somelib
使用gcc 5.4.0并且我必须使用4.8.5但是我认为这不是问题 - 我有使用somelib
的侧面项目并且它适用于gcc 4.8 (可执行文件SYSV
btw)。不知道接下来要检查什么。