-fPIC是否隐含在现代平台上

时间:2018-05-02 09:44:47

标签: linux gcc

我想检查共享库是否使用-fPIC标志进行编译。有什么方法(在Linux上,x86_64)来检查这个?

是否隐含-fPIC(从而使检查变得多余?)

2 个答案:

答案 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;那些)只是没有绝对寻址模式,所有代码都与位置无关。