重新编译-fPIC问题

时间:2017-08-22 10:29:09

标签: c assembly

我有以下c程序

#include <stdio.h>

int main() 
{
    printf("hello');
    return 0;
}

编译此文件时

gcc -c rr2.c

然后使用共享选项的链接器,如

/ld-new -shared    -o tmpdir/dump rr2.o 

它出现以下错误

  

rr2.o:在创建共享对象时,不能使用针对`.rodata'的重定位R_X86_64_32;用-fPIC重新编译

我不明白为什么会出现这种错误。任何人都可以帮我理解为什么会出现这个错误?

1 个答案:

答案 0 :(得分:5)

动态共享&#34;对象&#34;没有固定的地址,他们被加载到内存中。这意味着对函数和变量的所有引用都必须位置无关。您必须创建位置无关代码(或简称PIC)。

根据链接器的建议,通过在编译时添加-fPIC标志来完成此操作:

> gcc -fPIC -c rr2.c