在linux環境下 編譯c/c++檔案需要使用gcc或者make的編譯軟體進行編譯
編譯有三個過程:預編譯---->編譯----->鏈結 預編譯的過程就是將c/c++檔案的標頭檔案包含到**的過程 編譯就是將檔案變成機器** 鏈結就是將**中使用的各個函式庫的機器**進行鏈結變成可執行檔案
1:首先學習預編譯 gcc -o out.c -e src.c
這是hello.c的原始檔內容
如:gcc -o shao.c -e hello.c
可以看一下預編譯後生成的檔案內容
內容就是將stdio.h 和 stdlib.h檔案拷貝到shao.c中
預編譯結束後就要進行編譯檔案:gcc -o out.o -c src.c
如gcc -o hello.o -c hello.c 就會生成hello.c的機器** 真是順序是:生成組合語言 然後生成機器** 這裡就省略生成組合語言的過程
機器**生成後通過鏈結命令生成可執行檔案 gcc -o out src.o....
如gcc -o hello hello.o
執行編譯完成後的可執行檔案./hello
到這裡 乙個c檔案就被我們用gcc成功編譯成功啦~~到這只是體驗了預編譯和編譯的過程,那麼為很麼需要鏈結的過程才能生成可執行檔案,鏈結就是將源**中用到其他庫函式的**鏈結到編譯生成的機器**:
如更改hello.c**,使用到另乙個add.c中的add(int a,int b)的方法,如果不把add.c編譯成add.o檔案,直接使用gcc -o hello hello.c生成的可執行檔案會報錯,因為add()方法的機器**沒有鏈結進來,所以第三部需要gcc -o hello hello.o add.o鏈結完成後生成的hello可執行檔案才能執行:
如圖:
使用的add()方法是add.c中的**,需要執行gcc -o hello.o -c hello.c 和 gcc -o add.o -c add.c 生成add.o 和 hello.o的機器**
然後使用第三個步驟gcc -o hello add.o hello.o 進行鏈結生成可執行檔案hello才能執行
如果不進行add.o直接編譯gcc -o hello hello.o 的話可執行檔案不能執行
在真實專案中不使用gcc進行編譯 檔案太多不夠方便,可以把make理解為批處理編譯,我要將專案中的.c檔案與.o檔案關聯然後生成可執行檔案,完整的makefile檔案內容如下:
執行make命令會自動執行當前目錄下的makefile檔案:效果如圖
這樣編譯專案的話會很快。如果對makefile檔案內容不太理解的話,由於時間問題還是去看看makefile編譯的語法規範
ok just like ! just do it!
GCC 同時編譯多個 C C 檔案
以下這些操作都可以共用一條gcc指令 目錄結構如下 wohu ubuntu cpp src tree function.cpp function.h main.cpp 0 directories,3 files wohu ubuntu cpp src function.cpp內容 include v...
gcc下c c 程式編譯 執行命令
一 基本命令 c編譯 執行 gcc wall g o desktop test desktop test.c desktop test c 編譯 執行 g desktop c test.cpp o desktop c test.exe desktop c test.exe 注意具體目錄 二 新增警告...
GCC編譯器學習
不同的平台如x86和arm,一段程式跑起來到最下面會轉成彙編,彙編要轉成機器碼,機器碼會由於硬體平台不同而不同。有時候要程式設計序在arm上跑,必須針對arm寫程式,但是在arm上寫程式很麻煩 沒有很好的開發工具 所以我們就在x86平台上 windows 上把程式寫好,但是編譯的時候告訴它我們要執行...