【发布时间】:2017-04-27 06:01:03
【问题描述】:
我正在使用一个使用 sparc v8 架构的处理器。我想编译我的可执行文件,使每个函数调用都是绝对地址。使用 -fPIC 选项生成与位置无关的代码,此标志是否有任何反转?
【问题讨论】:
我正在使用一个使用 sparc v8 架构的处理器。我想编译我的可执行文件,使每个函数调用都是绝对地址。使用 -fPIC 选项生成与位置无关的代码,此标志是否有任何反转?
【问题讨论】:
大多数 GCC 选项同时具有 -fxxx 和 -fno-xxx 变体。
您可以轻松测试fPIC 是否属于这种情况。只需编译一些简单的测试:
int main () { printf ("Hello, world!\n"); }
命令行如下:
gcc -fPIC test.c -S
并在汇编器中查找 PLT 相关调用
call puts@PLT
现在尝试用相反的方式取消这个选项:
gcc -fPIC test.c -S -fno-PIC
您会看到,与 PLT 相关的调用已经消失,所以一切正常。
【讨论】: