共享函式庫分為靜態鏈結庫和動態鏈結庫。靜態鏈結的好處,是程式被搬移到另乙個同質系統而不必重新編譯,就可順利執行;缺點是它們的體積比較龐大,需要較多記憶體。動態鏈結庫的優缺點剛好與靜態鏈結庫互補,所浪費記憶體較少(特別是同時執行多個動態鏈結的程式且它們共享許多通用函式時),但是如果將檔案搬移到另乙個系統,卻不一定能順利執行。
共享函式庫的依賴關係
動態連線程式通常需要用到乙個以上的共享函式庫。若所需的函式庫不存在或是無法被找到,程式就無法執行。例如,若你打算執行乙個專為gnome圖形環境編寫的應用程式,但你的系統沒有按照必要的gtk函式庫,此時就會發生這種不愉快的事情。一般來說,只要按照正確的函式庫,就能解決問題。ldd工具可以讓你判斷執行特定檔案所需的函式庫。
ldd 語法
ldd programs 說明
列出programs所需的函式庫,包括函式庫的名稱以及所需函式在函式庫中的相對位置。
如果用來該命令後,顯示的函式庫位置中有"not found」字樣,那就表示系統找不到所需的函式庫。
鏈結共享函式庫
當你執行動態鏈結的程式時,ld.so會檢驗該程式檔案,找出該出現與共享函式庫之間的依賴關係,試著載入能夠滿足"unresolved linked」的共享函式庫。倘若找不到共享函式庫,該程式就無法執行。
當ld.so在搜尋函式庫時,會優先到/lib/和/usr/lib/這兩個目錄下查詢。若要讓ld.so到其他目錄下去搜尋函式庫(例如/usr/local/lib),就必須將新目錄的完整路徑加到ld_library_path環境變數中,或是寫在/etc/ld.so.conf配置檔案中。
每當你修改了配置檔案後,都應該執行一次ldconfig,使其產生新的ls.so.cache告訴快取檔案。
ldconfig 語法
ldconfig [options] lib_dirs 說明
依據/etc/ld.so.conf配置檔案,以及你給定的lib_dirs重建新的/etc/ld.so.cache快取記憶體檔案。
常用選項 -p
只檢視快取記憶體內容,不進行任何修改。 -v
詳細列出執行期間的過程與進度。
範例1:
檢視ld.so.cache檔案的內容:
ldconfig –p | less
範例2:
檢查ld.so.cache是否含有特定的函式庫:
ldconfig –p | grep sasl
sasl為要查詢的函式庫。
範例3:
重建ld.so.cache檔案:
# echo /usr/local/bin >> /etc/ld.so.conf
# ldconfig
linux下構建 共享函式庫( so)
在linux上用c建立共享庫so 1 建立math1.c,在命令列中輸入 nano math1.c int add int x,int y 2 編譯生成共享庫libmath1.so gcc fpic shared olibmath1.so math1.c 3 建立測試程式testmath.c,在命令...
Linux 下的靜態(函式)庫 動態(函式)庫
不用指定生成.o檔名 預設生成file1.o,file2.o,file3.o ar rv libname.a file1.o file2.o file3.or 將flie1.o,file2,o,file3.o插入archive,如故原先archive中已經存在某檔案,則先將該檔案刪除。v 顯示ar操...
Linux的靜態函式庫和動態函式庫
一 在linux中,有兩種函式庫,以 so字尾命名的是動態函式庫,以 a字尾命名的是靜態函式庫 二 靜態函式庫 1 靜態函式庫是多個目標檔案 o的集合 2 可以使用ar命令 archiver 來生成.a檔案 gcc c part a.c gcc c part b.c ar r libtest.a p...