簡體   English   中英

gcc共享庫無法鏈接到glibc

[英]gcc shared library failed linking to glibc

我正在Linux 64bit下使用Eclipse CDT編寫一個簡單的C共享庫。

代碼對<stdlib.h>rand()函數有一個引用。它編譯得很好但是在鏈接時報告來自鏈接器的以下錯誤:

gcc -shared -o "libalg.so"  ./sort.o   
/usr/bin/ld: ./sort.o: relocation R_X86_64_PC32 against undefined symbol `rand@@GLIBC_2.2.5' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: Bad value

sort.o是從文件編譯的目標文件。 libalg.so是目標共享庫名稱。

誰能解釋為什么會這樣?

謝謝。

x86_64架構上, gcc要求您默認使用-fPIC即Position Independent Code。

該錯誤的根本原因是符號rand的重定位類型是R_X86_64_PC32類型,這意味着它是PC相對的,並且應該位於與下一條指令相差32bit范圍內。

但目前的架構是x86_64類型,這意味着它可以位於64bit地址空間內的任何位置。

因此,動態鏈接器實際上無法將符號與此類重定位類型鏈接。

您必須使用-fPIC或使用-mcmodel=large編譯代碼,這實際上會使重定位類型為R_X86_64_64

有關鏈接如何完成的更多詳細信息,請參閱Eli Bendersky撰寫的這篇精彩博客

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM