linux生成動態庫 fPIC報錯

2021-08-06 06:05:25 字數 463 閱讀 9139

linux生成動態庫時遇到了relocation r_x86_64_32 against `luao_nilobject_' can not be used when ****** a shared object; recompile with -fpic錯誤。

-fpic作用於編譯階段,告訴編譯器產生與位置無關**(position-independent code),

則產生的**中,沒有絕對位址,全部使用相對位址,故而**可以被載入器載入到記憶體的任意

位置,都可以正確的執行。

這正是共享庫所要求的,共享庫被載入時,在記憶體的位置不是固定的。

所以,編譯共享庫需要-fpic引數,編譯的每個.o目標檔案也需要-fpic引數

解決辦法:

g++ -c -fpic test.cpp    生成test.o

g++ -fpic -shared -o libtest.so test.o

linux編譯動態庫之fPIC

在生成動態庫時,常常習慣性的加上fpic選項,fpic有什麼作用和意義,加不加有什麼區別,這裡做下小結 fpic的全稱是 position independent code,用於生成位置無關 什麼是位置無關 個人理解是 無絕對跳轉,跳轉都為相對跳轉。1 不加fpic選項 即使不加fpic也可以生成....

Linux生成動態庫系統

linux下動態庫檔案的擴充套件名為 so shared object 依照約定,全部動態庫檔名稱的形式是libname.so 可能在名字中增加版本 這樣。執行緒函式庫被稱作libthread.so。靜態庫的檔名稱形式是libname.a。共享archive的檔名稱形式是libname.sa。共享a...

Linux生成動態庫 so與生成靜態庫 a

動態庫共享庫 第一步 通過gcc fpic c 編譯生成.o檔案 gcc fpic c a.c 編譯生成.o檔案 fpic與位置無關 gcc fpic c b.c 生成a.o,b.o編譯檔案。第二步 通過上面已經生成的a.o,b.o檔案生成.so檔案 方法1 gcc shared wl o liba...