我想检查共享库是否使用-fPIC
标志进行编译。有什么方法(在Linux上,x86_64
)来检查这个?
是否隐含-fPIC
(从而使检查变得多余?)
答案 0 :(得分:2)
是的,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
相同。
答案 1 :(得分:1)
有些架构(不一定是"现代和#34;那些)只是没有绝对寻址模式,所有代码都与位置无关。