我有以下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重新编译
我不明白为什么会出现这种错误。任何人都可以帮我理解为什么会出现这个错误?
答案 0 :(得分:5)
动态共享&#34;对象&#34;没有固定的地址,他们被加载到内存中。这意味着对函数和变量的所有引用都必须位置无关。您必须创建位置无关代码(或简称PIC)。
根据链接器的建议,通过在编译时添加-fPIC
标志来完成此操作:
> gcc -fPIC -c rr2.c