編譯的參數(shù)說明
gcc/clang -g -O2 -o test test.c -I -L -l
參數(shù)說明?
-g:輸出文件中的調試信息
-O:對輸出文件做指令優(yōu)化
-o:輸出文件
-I:指定頭文件位置(有可能引用的文件與當前文件不在同個目錄)
-L:指定庫文件位置(所引用三方庫文件位置,例如使用FFmpeg下面的某些庫)
-l: 指定使用哪個庫
通過編譯生成靜態(tài)庫.a文件
通過自己編寫的c文件可通過編譯生成.o文件,例如 現(xiàn)在編寫了一個函數(shù)實現(xiàn)的add函數(shù)
編譯語句:
gcc -g -c test.c 該命令生成指定的 test.o文件? ?但是由于test.o不帶main函數(shù)入口,所以不能直接通過? ./test.o執(zhí)行
再通過命令生成 靜態(tài)文件.a? ,生成命令? :
libtool -static -o libmylib.a? 會生成靜態(tài)庫 mylib.a? (注: libmylib? 前面的lib是必須寫的,實際庫的名稱? 是mylib)
完整例子
我們編寫一個加法的函數(shù)add?
編寫訪問該函數(shù)的頭文件.h
然后編譯addLib.c凄杯,通過編譯我們可以得到addLib.o文件混卵,再通過addLib.o生成靜態(tài)庫.a文件 纳像,步驟如下:
① 編譯成.o文件? gcc/clang -g -c addLib.c
② 生成靜態(tài)庫文件.a? ? libtool -static -o libmyaddlib.a addLib.o
通過以上兩步拙泽,可用得到庫 : libmyaddlib.a文件
再編寫測試類 addTest.c
編譯addTest.c文件:
gcc -g -o addTest addTest.c -I . -L . -lmyaddlib? ?(注: 這里庫的名稱必須是之前生成庫名稱前面去掉lib之后的名稱)
通過以上步驟淌山,可以獲取編譯后的 addTest.o文件,繼續(xù)執(zhí)行文件:
./addTest?
可用得到執(zhí)行結果顾瞻,也就是輸出 30