gcc程式設計

2021-08-14 10:01:19 字數 1674 閱讀 4918

gcc程式設計的過程:

# gcc -e main.c -o main.i   //預處理,-o 定義生成的檔名

# gcc -s main.c -o main.s  //編譯

# gcc -c main.c -o main.o  //彙編

# gcc main.o -o hello      //鏈結  生成可執行檔案

通常我們在gcc程式設計的時候,直接使用 #gcc main.c-o hello一條命令完成了以上的工作,但是實際上整個過程是有上邊四個過程的,我們經常用的還有生成*.o檔案,下面

會說到。

如果我們在編譯時需要的標頭檔案不再當前目錄,那麼直接編譯會報錯,因為他首先會在當前路徑下找標頭檔案,這時候就要加上檔案路徑,

# gcc -c ./head/head.c main.c -o test -i ./head     -i表示他會在那個目錄下面找標頭檔案,相當於說明了兩次標頭檔案的位置

關於庫檔案,有兩類,分為動態庫和靜態庫,動態庫在windows和linux下面的形式分別為 *.dll 和 *.so,靜態庫分別為 *.lib 和  *.a;

庫檔案可以結合標頭檔案*.h來執行,這樣就可以在一些不想開源的場合將原始檔*.c做成庫檔案,就可以隱藏了原始碼。

這裡(這是乙個鏈結)還有一些gcc程式設計的應用舉例,是當時的乙個作業

在linux下生成動態和靜態庫

靜態庫:

#gcc -c *.c *.c main.c   //將*.c檔案處理為*.o檔案

# arcr libname.a *.o *.o

/*生成靜態庫的命令,lib是字首,name是庫檔名,後面是這個庫檔案所依賴的檔案,也就是庫依賴,一般就是第一步生成得*.o檔案

# gcc -o file_name main.o libname.a

# gcc -o file_name main.c -l. -lname/*生成可執行檔案file_name的命令,第二條後面的-lname中,l代表lib,name就是定義的靜態庫的name, -l加路徑,表示庫檔案

所在路徑,這裡的 . 也就是當前路徑*/     動態庫

#gcc -c *.c *.c main.c   //將*.c檔案處理為*.o檔案

# gcc -shared -fpci -o libname.so *.o *.o

//生成分享庫,也就是動態庫

#gcc -o file_name main.c -l. -lname

//生成可執行檔案

同樣是生成了可執行檔案,不同的是,靜態庫生成的可以直接在當前路徑下執行,但是動態庫不行,將動態庫檔案移動到系統庫中,也就是lib資料夾(64位系統為lib64),

再執行就可以執行。

ldd + 可執行檔名   可以看到庫的依賴

另外幾種常用命令

應用舉例:

程式設計工具 GCC基礎命令

假設源程式檔名為test.c 選項 e 用法 gcc e test.c o test.i 作用 將test.c預處理輸出test.i檔案。選項 s 用法 gcc s test.i 作用 將預處理輸出檔案test.i彙編成test.s檔案。選項 c 用法 gcc c test.s 作用 將彙編輸出檔案...

Linux程式設計起步 GCC基本用法

初學時最好從命令列入手,這樣可以熟悉從編寫程式 編譯 除錯和執行的整個過程。編寫程式可以用vi或其它編輯器編寫。編譯則使用gcc命令。要往下學習首先就得熟悉gcc命令的用法。gcc命令提供了非常多的命令選項,但並不是所有都要熟悉,初學時掌握幾個常用的就可以了,到後面再慢慢學習其它選項,免得因選項太多...

Linux程式設計起步 GCC基本用法

初學時最好從命令列入手,這樣可以熟悉從編寫程式 編譯 除錯和執行的整個過程。編寫程式可以用vi或其它編輯器編寫。編譯則使用gcc命令。要往下學習首先就得熟悉gcc命令的用法。gcc命令提供了非常多的命令選項,但並不是所有都要熟悉,初學時掌握幾個常用的就可以了,到後面再慢慢學習其它選項,免得因選項太多...