Linux下動態庫的使用

一、生成動態庫:html

gcc -fPIC -shared -o libdemo.so demo.clinux

考慮程式庫major的升級會破壞兼容性;而minior的升級則可能不會,通常建議用如下方式來生成動態庫。c++

gcc -fPIC -shared -Wl,-soname,libdemo.so.major -o libdemo.so.major.minor demo.cspa

能夠經過ldconfig -n 來查看動態庫的連接.net

二、使用動態庫htm

頭文件引入時必須,而後再加入編譯選項-ldemo便可(demo爲動態庫的名)。blog

三、Linux的標準庫存在3種連接方式:全靜態 , 半靜態,全動態,根據參考文獻1的結論,大部分狀況建議採用半靜態方式。ci

四、三種標準庫連接方式的編譯器選項及優缺點以下:編譯器

標準庫連接方式 示例編譯器選項 優勢 缺點
全靜態 -static -pthread -lrt -ldl 不會發生應用程序在 不一樣 Linux 版本下的標準庫不兼容問題。 生成的文件比較大,
應用程序功能受限(不能調用動態庫等)
全動態 -pthread -lrt -ldl 生成文件是三者中最小的 比較容易發生應用程序在 
不一樣 Linux 版本下標準庫依賴不兼容問題。
半靜態 (libgcc,libstdc++)

-static-libgcc -static-libstdc++ io

-L. -pthread -lrt -ldl

靈活度大,可以針對不一樣的標準庫採起不一樣的連接策略,
從而避免不兼容問題發生。
結合了全靜態與全動態兩種連接方式的優勢。
比較難識別哪些庫容易發生不兼容問題,
目前只有依靠經驗積累。
某些功能會因選擇的標準庫版本而喪失。

五、 半靜態連接方式,主要在於其還須要在連接前增長額外的一個步驟:
ln -s `g++ -print-file-name=libstdc++.a`,做用是將 libstdc++.a(libstdc++ 的靜態庫)符號連接到本地工程連接目錄。
-print-file-name 在 gcc 中的解釋以下:
-print-file-name=<lib> Display the full path to library <lib>

六、gcc的編譯器選項說明:

-static:靜態連接全部庫 

-static-libgcc:靜態連接 gcc 庫 
-static-libstdc++:靜態連接 c++ 庫 

 

參考文獻:

一、http://www.ibm.com/developerworks/cn/linux/l-cn-linklib/index.html

二、http://www.cnblogs.com/skynet/p/3372855.html

三、http://blog.csdn.net/zjg555543/article/details/7514946

相關文章
相關標籤/搜索