(1) 使用編譯選項 -fpic ,產生與位置無關的**
(2) 使用編譯選項 -fvisibility=hidden 隱藏符號
(3) 使用鏈結選項 -shared 表示生成動態鏈結庫
(4) 使用鏈結選項 -wl 將引數傳遞給鏈結器
(5) 使用鏈結選項 -soname 指定庫名,注意不是庫檔名
(6) 保險起見,顯式鏈結 c 庫,即指定 -lc ,保證得到所需的啟動**,避免程式在有不相容版本 c 庫的系統上無法啟動
(7) 為對外輸出符號加上特殊宣告, __attribute__((visibility("default")))
(8) 為了讓 gcc 編譯鏈結時能找到非預設路徑下的動態鏈結庫,在 /etc/profile 中新增 gcc 的 library_path 環境變數
(9) 為了讓程式執行時能自動找到非預設路徑下的動態鏈結庫,在 /etc/ld.so.conf 中新增路徑,然後用 /sbin/ldconfig 更新快取
(10) 例子:
a) int func() __attribute__((visibility("default")));
b) gcc –fpic –fvisibility=hidden –g –c ***.c –o ***.o
c) gcc –g –shared –wl,-soname,libxyz.so –o libxyz.so.1.0 ***.o
export ld_library_path=thirdparty/lib增加自己的動態庫路徑
Linux下編寫簡單的動態鏈結庫
1 linux下編寫動態鏈結庫。通常靜態鏈結庫是編譯的時候和原始檔一起編譯生成可執行檔案的。動態鏈結庫則不是,它是乙個已經編譯好的檔案 靜態則不是 只有當程式執行的時候 但是編譯的時候要將動態鏈結庫的資訊載入進來 它才去找動態鏈結庫拿它想用的一些函式。而且動態鏈結庫可以提高通用性,編寫乙個動態鏈結庫...
Linux下編寫簡單的動態鏈結庫
linux下編寫簡單的動態鏈結庫 1 linux下編寫動態鏈結庫。通常靜態鏈結庫是編譯的時候和原始檔一起編譯生成可執行檔案的。動態鏈結庫則不是,它是乙個已經編譯好的檔案 靜態則不是 只有當程式執行的時候 但是編譯的時候要將動態鏈結庫的資訊載入進來 它才去找動態鏈結庫拿它想用的一些函式。而且動態鏈結庫...
編寫動態鏈結庫
很多時候我們寫 的時候會經常用到某些 段,比方說求兩個或幾個整數的和或者將乙個整形陣列轉化為二叉樹等等。經常使用這些 但是每一次又得重新再寫一遍,次數多了等於就是重複無用勞動了。所以,可以自己動手寫乙個自己的動態鏈結庫,儲存起來。下次用到只需要加上庫就ok了,這樣既方便了自己又對動態鏈結庫本身的工作...