[英]Is -fPIC implied on modern platforms
我想检查共享库是否已使用-fPIC
标志进行编译。 有什么可能的方法(在Linux上, x86_64
)来检查?
是否暗含-fPIC
(因此使检查变得多余?)
是的,在没有-fPIC
情况下,GCC不允许您链接共享库,因此您无需检查任何内容:
$ 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
相同。
某些架构(不一定是“现代”架构)只是没有绝对寻址模式,所有代码在那里都与位置无关。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.