Linux下編寫動態鏈接庫的簡單過程

(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 xxx.c –o xxx.o

c)        gcc –g –shared –Wl,-soname,libxyz.so –o libxyz.so.1.0 xxx.o

 

原文地址:http://blog.csdn.net/NeptuneX/archive/2006/04/06/653433.aspx

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章