(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