gcc 編譯器:
1.gcc 編譯的四個階段:預處理,編譯,彙編,鏈接;
2.gcc 支持的後綴名:
.C /.cc / ./cpp C++源程序;
.m Objective-C原始程序;
.i 經過預處理的C原始程序;
.ii 經過預處理的C++原始程序;
.s /.S 彙編語言源程序;
.o 目標文件;
.a/.so 編譯後的庫文件;
3、gcc -Wall 文件名, 編譯時儘可能的提供警告;
4、 gcc -O2 文件名, 編譯時儘可能進行優化,產生儘可能小的和執行儘可能快的代碼;
5、靜態庫: 在編譯時,直接將庫函數的代碼加到可執行文件中,在以後執行過程中,不在依賴該庫文件;
命名方式:lib + 庫名+.a (如: libstd.a)
動態庫 和動態加載庫: 在編譯時不用加入代碼,在運行時裝載和卸載;
命名方式:lib + 庫名 + .so + .版本號 (如libc.a.so.9)
6、創建靜態庫:
gcc -c c文件1 c文件2(生成.o文件)
ar -cr 庫名稱 目標文件1 目標文件2(.o文件)
7、靜態庫的使用:
gcc -o 生成名稱 c文件 -l庫命名(如lm 表示連接的庫爲libm.a 或者libm.so;) -L/路徑
由於靜態庫不能先於源程序連接,所以連接庫(-l庫名稱) 都卸載最後;
8、創建共享庫:
gcc -c -fPIC test.c
gcc -c -fPIC text2.c
gcc -shared -fPIC -o libtest.so test.o test2.o
9、/lib : 系統必備共享函數庫;
/usr/lib: 標準共享函數庫和靜態函數庫;
/usr/local/lib: 本地函數庫;
10、在更新了共享庫之後,要使用ldconfig命令,告知系統;
11、ldd 用於查看庫函數之間的依賴性;
12、在程序中使用指針(空類型) = dlopen(“路徑”,連接方式(flag))調用連接庫,使用完後使用dlclose(指針)關閉該庫;該函數在<dlfcn.h>頭文件中;
13、gcc -c 1.c 2.c 存在的意義:
如果要編譯的文件非常多,但是在編譯完成之後修改了某個文件,那麼只需在將整個文件再重新編譯成.o文件,然後再連接一下就可以了,這個就節省了大量的時間。