歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux技術 >> linux源碼編寫入門gcc

linux源碼編寫入門gcc

日期:2017/3/3 11:17:55   编辑:Linux技術

使用c語言進行編譯的簡單實例:

編寫程序源代碼:hello world

開始編譯和測試執行

在默認狀態下,如果直接以gcc編譯源碼,並沒有加上任何參數,則執行文件會默認為a.out這個文件名。

然後執行這個a.out文件就行

那麼如果我想產生目標文件object file來進行其他操作,而且執行文件的名字也不是默認的.a.out

hello.o 就是目標文件,再利用這個目標文件制作出一個名為hello的執行文件。

那麼為什麼要多此一舉,得到目標文件呢?

因為源碼文件可能並非只有一個文件,無法直接進行編譯,這個時候需要先生成目標文件,然後再以鏈接制成二進制可執行文件。

比如這個例子:

vim thanks.c

vim thanks2.c

可以看出,thanks.c代碼的主函數中調用了thanks2.c中的函數。

對兩份源碼進行編譯成目標文件

此時這只是兩個獨立的目標文件,thanks.o、thanks2.o

要將他們鏈接成一個二進制可執行文件

如果有一天,更新了thanks.c這個源碼的內容,那麼你只要重新編譯thanks2.,c來產生新的thanks2.o,然後再用gcc -o重新鏈接生成新的二進制執行文件即可,不必編譯其他沒有改過的源碼文件。

調用外部函數庫:

如果要計算數學公式,比如三角函數和指數函數,就要加入函數庫來計算。

比如主程序是這樣的:

sin函數在linux中是寫在libm.,so這個函數庫當中的,由於沒有在源碼中將這個函數庫加進去,因此需要在編譯與鏈接時將這個函數庫鏈接進執行文件裡面。

-lm:-l 加入某個函數庫(library),m表示libm.so這個函數庫

-L/lib -L/usr/ilb 表示我要的函數庫libm.so在/lib或者/usr/lib中搜索。

需要注意的是,linux默認是將函數庫放置在/lib與/usr/lib當中,所以麼有寫-L/lib -L/usr/ilb,也是沒有關系的,如果你自定義的函數庫不是放在這兩個目錄下, 那麼-L/path就很重要了。

gcc的簡單用法:

在上面我們使用了 gcc -c ;gcc -o等

gcc -c:僅將源碼編譯成為目標文件,並不制作鏈接功能,即會生成hello.o文件,但不會生成可執行文件。

gcc -o hello hello.c 將編譯結果輸出成某個特定的文件名,-o後面跟的要輸出的binary file文件名

gcc sin.c -lm -L/lib -L/usr/lib -I/usr/include 在進行編譯時,將鏈接的函數庫和頭文件寫入

-lm 指的是libm.so函數庫,-L函數庫的搜索目錄,-I源碼內include文件目錄。

Copyright © Linux教程網 All Rights Reserved