網(wǎng)站在其他地區(qū)備案買友情鏈接
2.使用尖括號包括
如果要使用尖括號包括頭文件,有兩種方法
1.將頭文件移動到標(biāo)準(zhǔn)頭文件目錄,linux為/usr/local/include.windows下為C:\MinGW\include
2.編譯時指定頭文件目錄,gcc -I/頭文件目錄 … 編譯時-I參數(shù)就是用于指定頭文件目錄
3.靜態(tài)庫
將文件編譯為靜態(tài)庫,可以將多個目標(biāo)文件保存為一個存檔,在linux中存檔命令為"ar",例如
ar -rcs libmylib.a source1.o source2.o
參數(shù)r表示如果.a文件存在,則更新它,c表示創(chuàng)建存檔時不反饋信息,s表示在.a文件開頭建立索引,文檔名必須以lib開頭,否則編譯器無法找到該存檔
編譯時使用靜態(tài)庫的方法為使用-l參數(shù),如果該靜態(tài)庫處在標(biāo)準(zhǔn)目錄(linux下為/usr/local/lib)中,則無需指定目錄,如果不在標(biāo)準(zhǔn)目錄中,需要使用-L參書指定靜態(tài)庫所處的目錄,例如
gcc test.c -L/my_lib -lmylib -o test
3.使用靜態(tài)庫實例
創(chuàng)建頭文件hellow.h,how.h,c文件hellow.c,how.c,main.c,以及一個Makefile文件
- hellow.h
void hellow();
- how.h
void how();
做完之后可以將兩個頭文件移動到標(biāo)準(zhǔn)頭文件目錄下,如果不移動,后面的makefile文件需要使用-I參數(shù),指定頭文件目錄為當(dāng)前目錄
- hellow.c
#include<hellow.h>
#include<stdio.h>
void hellow()
{
printf(“hellow world\n”);
}
- how.c
#include<how.h>
#include<stdio.h>
void how()
{
printf(“how are you\n”);
}
- main.c
#include<stdio.h>
#include<hellow.h>
#include<how.h>
int main()
{
hellow();
how();
return 0;
}
- Makefile文件
#include<hellow.h>
#include<how.h>
hellow.o:hellow.c
gcc -c hellow.c -o hellow.o
how.o:how.c
gcc -c how.c -o how.o
libgreet.a:hellow.o how.o
ar -rcs libgreet.a hellow.o how.o
run:main.c libgreet.a
gcc main.c -L. -lgreet -o run
- 運行make run
[root@izhqmn61154vmrz libTest]# make run
gcc -c hellow.c -o hellow.o
gcc -c how.c -o how.o
ar -rcs libgreet.a hellow.o how.o
gcc main.c -L. -lgreet -o run
- 運行run
[root@izhqmn61154vmrz libTest]# ./run
hellow world
how are you
- 由上面的實例可以看出,靜態(tài)庫是由不同的目標(biāo)代碼組件而成的,需要先編譯.o文件,再創(chuàng)建.a文檔,再將它們鏈接成可執(zhí)行程序,一旦用這些獨立的目標(biāo)代碼創(chuàng)建了可執(zhí)行程序,就沒辦法修改組成靜態(tài)庫的目標(biāo)文件,除非重新編譯.o文件,創(chuàng)建.a文檔…,這也是它被稱為靜態(tài)庫的原因
4.動態(tài)庫
靜態(tài)庫在生成執(zhí)行文件后無法修改組成執(zhí)行文件中的目標(biāo)代碼,而動態(tài)庫通過將目標(biāo)代碼分別保存在單獨的文件中,在程序運行時才將之動態(tài)的鏈接到一起,從而實現(xiàn)了可以修改目標(biāo)文件的目的
- 創(chuàng)建動態(tài)庫
將目標(biāo)代碼轉(zhuǎn)換為動態(tài)庫之前,需要先將它編譯為.o目標(biāo)文件:
gcc -fPIC -c source.c -o source.o
-fPIC表示想創(chuàng)建位置無關(guān)代碼,在linux中必須加這個參數(shù),然后創(chuàng)建動態(tài)庫
gcc -shared source.o -o source.so
-shared選項將.o文件轉(zhuǎn)化為動態(tài)庫,在linux中動態(tài)庫被稱為共享目標(biāo)文件,后綴名為.so,而在windows中,動態(tài)庫被稱為動態(tài)鏈接庫,后綴名為.dll
- 動態(tài)庫使用實例
創(chuàng)建頭文件hellow.h,c文件hellow.c,main.c將頭文件放在上一級目錄的includes目錄中,同時創(chuàng)建libs目錄,文件內(nèi)容與靜態(tài)庫使用的文件相同
- 將hellow.c文件編譯為.o文件