3
我有以下的C程序重新編譯-fPIC問題
#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重新編譯
我不明白爲什麼會出現這個錯誤。任何人都可以幫助我理解這個錯誤出現的原因嗎?
我現在重定位和位置無關的代碼混淆:
這是編譯時完成的,由鏈接器的建議,通過增加
-fPIC
標誌。 – Gaurav通常這意味着代碼可能會從不同的地址運行,並且它包含特殊的表格,其中包含需要修改代碼才能運行的數據。後者是可以放置在任何地址並運行而不需要任何更改的東西 –
@GauravPathak代碼可以重新定位而不依賴於位置。在位置無關的代碼可能需要修改才能運行。這種修改可能會對虛擬內存使用有一些有趣的(壞)影響,所以更現代的操作系統傾向於要求PIC用於共享對象。請參閱https://en.wikipedia.org/wiki/Position-independent_code –