C語言學習筆記-靜態庫與動態庫

一.當多個程序共用一個源文件(某個自定義的函數)內容時的方法步驟linux

1.建立共用的自定義函數文件.c結尾,內容爲該函數的內容windows

2.建立的文件以.h結尾的頭文件,內容是函數聲明函數

3.在調用共用函數時聲明的方法:spa

#include "xxxx.h"

二.什麼是標準頭文件?操作系統

書寫c語言時,#include <stdio.h>其中stdio.h文件是標準頭文件,標準頭文件的保存目錄(在linux系統中)是:/usr/local/include或/usr/include。code

三.將自定義函數名文件做爲標準頭文件使用的步驟blog

第一種方法:將頭文件放在標準目錄中編譯器

第二種方法:在include語句中使用完整路徑名io

#include"/xxxx/xxxx.h"編譯

第三種方法告訴編譯器去哪裏找頭文件

gcc -I./頭文件所在目錄 c文件 -c 目標文件名

四,共享目標文件

將.o目標文件放入一個共享目錄的地方,編譯時加上參數便可

gcc -I /目標文件目錄 c源文件

        /目標文件目錄/目標文件

        /目標文件目錄/目標文件 -o 須要編譯的目標文件

五.靜態庫

1.靜態庫是什麼?

靜態庫中存儲了由c文件編譯後生成的目標文件(.o結尾),打包而造成的文件

靜態庫多爲.a結尾文件,在linux操做系統中靜態庫文件的名字格式爲libxxxx.a,系統靜態庫文件存放在/usr/local/lib 或 /usr/lib 或/usr/lib64/

使用nm命令可查看靜態庫文件內容

1.怎樣建立靜態庫?

ar -rcs 靜態庫文件名 多個目標文件的名字

2.編譯時怎麼樣調用靜態庫

gcc 要編譯的c源文件名字 -l靜態庫名字 -o 目標文件名字

-l選項後面的名字必須與靜態庫名字的一部分匹配

上面的例子是調用在系統標準靜態庫目錄下的靜態庫文件

下面的例子是調用自定義目錄下的靜態庫文件

gcc 要編譯的c源文件名字 -L存放靜態庫的目錄名字 -l靜態庫名字 -o 目標文件名字

六.動態庫

1.什麼是動態庫?

動態庫文件的格式爲:

xxxx.dll(windows操做系統)

xxxx.dll.a(windows操做系統)

libxxx.so(linux操做系統)

libxxxx.dylib(mac操做系統)

在程序運行時加載的庫文件,與靜態庫的區別,靜態庫是在編譯時就將代碼組合到一塊兒生成一個可執行文件,不須要相同的環境便可將可執行文件移植到其餘機器使用,而動態庫是在程序加載時動態載入目標文件,可執行文件與動態庫文件必須同時存在,不可單獨移植到其餘機器。

2.動態庫文件的建立:

首先建立目標文件

gcc -I頭文件所在目錄 -fPIC -c c源文件名字 -o 目標文件名字

-fPIC選項告訴編譯器建立位置無關代碼

建立動態庫文件

gcc -shared 上一步生成的目標文件名字 -o 動態庫文件的名字

運行程序時調用標準目錄下的動態庫,直接運行程序便可

調用自定義目錄下的動態庫文件的方法:

linux下首先設置變量指向自定義的動態庫目錄:

export LD_LIBRARY_PATCH=$LD_LIBRARY_PATCH:自定義的動態庫目錄
相關文章
相關標籤/搜索