簡體   English   中英

為什么包含-fPIC來編譯靜態庫在運行時會導致分段錯誤?

[英]Why does including -fPIC to compile a static library cause a segmentation fault at run time?

我正在使用g ++編譯C ++靜態庫,並使用-fPIC選項。 我必須使用-fPIC選項,因為最終該庫將與其他靜態庫鏈接在一起以形成動態庫。

當我在本地測試靜態庫時,當我不包括-fPIC選項時,它可以正常工作。 但是,當我使用-fPIC編譯庫時,在調用其中一個函數時會在運行時收到分段錯誤錯誤。

包含-fPIC來編譯靜態庫的原因可能是什么原因導致在運行時出現分段錯誤?

動態庫應該在運行時加載,因此不能具有與位置有關的代碼。

另一方面,靜態庫只是對象文件的存檔。

與動態庫鏈接時,鏈接器將庫的名稱添加到可執行文件中,因此加載器可以在加載程序時加載它。 當鏈接程序與靜態庫鏈接時,它基本上會提取目標文件並像其他任何目標文件一樣與它們鏈接。

因此,除非您在所有其他目標文件都與位置無關的位置上創建可執行文件(將-fPIC用作程序代碼),否則無法與使用與位置無關的代碼的靜態庫鏈接,否則不會設置生成的可執行文件為它。

暫無
暫無

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

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