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...