linux 庫檔案 產生與使用

來源:互聯網
上載者:User
1、linux庫檔案分為靜態庫和動態庫兩種。靜態庫習慣以.a 結尾,而動態庫習慣以.so(shared object)結尾。而且必須以lib開頭。

2、靜態庫的原則是“以空間換時間”,增加程式體積,減少已耗用時間;

產生:在編譯時間候,先產生目標檔案.o,然後用ar檔案對目標檔案歸檔,產生靜態庫檔案。

例如:ar -rc libtest.a myalib.o (注意:ar -rc 目標 .o檔案名稱),目標一定要以lib開頭。

3、使用時候,在連結時候,加上選項 -l 後接庫檔案名稱,注意:必須是檔案名稱去掉尾碼和lib,
如:gcc -o main  main.o -ltest

而且-ltest必須放在main.o的後面,(規則是,越底層的庫越要放在後面)。

4、gcc的其他常用的選項,

-c 編譯成目標檔案 如:gcc -c main.c 就是編譯main.c成目標檔案main.o

-I 標頭檔的尋找路徑,如:gcc -c main.c -I./inc 意思是:標頭檔的尋找路徑除了預設的之外,再加上./inc目錄下的。

-L 庫檔案的尋找路徑,如:gcc -o main main.o -L./lib -ltest 說明:libtest.a 或者 libtest.so 庫檔案的尋找路徑除了預設之外,再加上./lib目錄。

-MM 匯出檔案的依賴關係(用#include 中的內容)如:gcc -MM main.c找出main.c的所依賴的標頭檔

-o 產生最終目標

-D宏定義 相當於在C中些語句#define ... 如:-DPI=3.14 就相當於在檔案裡面寫語句#define PI 3.14

5、動態庫

(1)、產生:在連結時,用如下選項:-shared -fpic 如: gcc -fpic -shared -o libtest.so myalib.c

(2)、使用:有隱式使用和顯示使用,隱式使用就是共用方式,程式一開始運行就調進去。在連結時候用如下:
gcc -o main main.o -L./lib -ltest(像靜態庫的一樣)

顯示使用就是在程式中用語句把動態庫調進來,用系統調用:dlopen、dlsym、dlerror、dlclose函數,那樣在編譯連結時候,不用加上:-L./lib -ltest了。不過要使用dl*系列函數在編譯連結時要加上 -ldl

6、如果同一目錄下,既有靜態庫也有動態庫,比如libtest.a libtest.so都存在,那麼dl程式(等一下介紹)就把動態庫調進去,沒有動態,就找靜態。再沒有,就報錯。

7、動態庫的搜尋路徑

dl對動態庫的搜尋路徑如下(按順序如下)

a.編譯目標代碼時指定的動態庫搜尋路徑;(如果要指定程式行時在./lib目錄下找庫檔案libtest.so,命令如下:gcc -o main main.c -L./lib -ltest -Wl,-rpath ./lib) ,其中,-Wl的意思是,後面的選項直接交給ld程式處理,-rpath選項是說更改搜尋路徑為後面的參數./lib

b.環境變數LD_LIBRARY_PATH指定的動態庫搜尋路徑;

c.設定檔/etc/ld.so.conf中指定的動態庫搜尋路徑;(修改完檔案後,用ldconfig更新)

d.預設的動態庫搜尋路徑/lib和/usr/lib;

8、一些常用的命令(與庫有關的)

(1)、ld 是gcc的連結程式。

(2)、ldd是查看可執行檔中所依賴的庫的程式,比如想查main程式用到了那些動態庫,可以直接
ldd main

(3)、ldconfig用來更新檔案/etc/ld.so.conf的修改生效。

(4)、nm用來查看.so庫中的函數名字,標記是T的就是動態庫裡面產生的名字。如:nm /lib/libc*.so

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.