我想检查是否使用-fPIC
标志编译了共享库。有哪些可能的方法(在Linux上,x86_64
)来检查这个问题?
是否意味着-fPIC
(因此使检查多余?)
最佳答案
是的,gcc不允许您在没有-fPIC
的情况下链接共享库,因此您不需要检查任何内容:
$ gcc tmp.c -shared
/usr/bin/ld: /tmp/ccqQVR9Y.o: relocation R_X86_64_32 against `compare' can not be used when making a shared object; recompile with -fPIC
/tmp/ccqQVR9Y.o: error adding symbols: Bad value
collect2: error: ld returned 1 exit status
$ gcc tmp.c -shared -fPIC
编辑
从技术上讲,如果共享库的任何函数都不调用其他函数或访问全局变量,则可以在不
-fPIC
的情况下编译它。但在这种情况下,生成的代码将与-fPIC
相同。关于linux - -fPIC暗示在现代平台上,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50131568/