gcc簡單使用

gcc:linux下的一個c編譯器。

常用gcc命令:

gcc -E main.c -o main.i //-E gcc預編譯指令,將c文件預編譯爲i文件 -o filename輸出爲名稱爲filename的文件

gcc -S main.i -o main.s //-S編譯指令,將i文件編譯爲s文件(彙編指令)

as main.s -o main.o //彙編爲目標文件(機器碼)

gcc main.o -o main //鏈接動態庫,轉爲可執行文件

 

以上是一步一步編譯成可執行文件的過程,

gcc -c main.c -o main 一步將c文件預編譯、編譯、彙編爲o文件的命令

 

如果有多個h文件和c文件要一起編譯,比如:main.c add.c add.h(add.h在當前目錄)

則命令爲:gcc main.c add.c -I.     (.代表當前目錄)

 

動態庫與靜態庫的區別:

靜態庫在鏈接過程中將庫文件內容寫入可執行文件,生成可執行文件後刪除庫文件還是可以執行可執行文件的,而動態庫將庫文件函數地址寫入可執行文件,將庫文件刪除後,可執行文件也不能運行了,所以靜態庫容易配置,但佔的空間大,動態庫佔的空間小,工作中一般使用動態庫.

生成動態庫:

比如add.c中寫了一個add函數

1.gcc -fPIC -Wall -c add.c //-fPIC生成動態庫的選項(不是很明白)-Wall打開所有類型警告(開了是爲了讓動態庫更加標準,如果別人使用你的動態庫還報錯就很難看) -c直接預編譯編譯彙編到.o文件

2.gcc -shared -o libadd.so add.o //將add.o轉變爲動態庫libadd.so ,命名必須爲lib*.so,靜態庫必須爲lib*.a

然後將動態庫文件移到默認的尋找動態庫的文件夾中,比如/usr/lib

3.sudo mv libadd.so /usr/lib

在c程序中使用動態庫: gcc -omain main.c -ladd(-l動態庫名稱,即鏈接動態庫,libadd.c則爲-ladd)

製作靜態庫:

1.     gcc -c -o add.o add.c  先一步生成目標文件.o文件

2.     ar crsv libadd.a add.o //生成靜態庫文件lib*.a

3.     sudo mv libadd.a /usr/lib

在c程序中使用靜態庫和動態庫一樣,所以如果有libadd.so和libadd.a使用哪個庫是不確定的。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章