先感謝這篇文章 介紹了ld的庫檔案怎麼引用的
**如下
----------------------- test.c-----------------------------
#include
void mian()
今天看了下編譯的過程,gcc –o test text.c 是一步到位的做法
要像一步一步做出來 了解怎麼編譯的,是這樣的
[root@localhost workspace]# cpp test.c test.i
得到了預處理檔案。
[root@localhost 4.1.1]# cc1 test.c test.s
這裡就得到了編譯後的檔案
這裡cc1命令不一定在環境變數中,gcc -v hello.c 2>&1 |grep cc1 可以看到cc1在哪個目錄下執行的時候可以把test.c移到該資料夾下用./cc1
[root@localhost 4.1.1]# as -o test.o test.s
現在得到了彙編檔案
[root@localhost 4.1.1]# ld -dynamic-linker /lib/ld-linux.so.2 -o test /usr/lib/crt1.o /usr/lib/crti.o test.o -lc /usr/lib/crtn.o
得到了test
[root@localhost 4.1.1]# ./test
hello[root@localhost 4.1.1]#
最終編譯完成了
下面是擴充套件 這篇文章對編譯有乙個具體的講述
這裡寫一點我的理解:1.
在命令列定義巨集:gcc -dmacro hello.c
等同於在檔案的開頭定義巨集,即#define maco,但是在命令列定義更靈活。例如,在源**中有這些語句。
#ifdef debug
printf("this code is for debugging/n");
#endif
如果編譯時加上
-ddebug
選項 (
要多加乙個d
),那麼編譯器就會把printf所在的行編譯進目標**,從而方便地跟蹤該位置的某些程式狀態。這樣
-ddebug就可以當作乙個除錯開關
,編譯時加上它就可以用來列印除錯資訊,發布時則可以通過去掉該編譯選項把除錯資訊去掉。
2
C語言的編譯過程
乙個源程式執行得到結果一般都要經過編譯和執行的過程,c語言的編譯和執行過程如下 編譯的過程 編譯的功能是將人們能看懂的高階語言,轉換成計算機能看懂的二進位制語言,可以分為下面的六個階段 乙個原始檔經過上述的6個過程即可轉化成目標 檔案,把高階語言轉化成機器語言。c語言編譯的完整過程如下圖 1 編譯預...
C語言的編譯過程
編譯,編譯程式讀取源程式 字元流 對之進行詞法和語法的分析,將高階語言指令轉換為功能等效的彙編 再由匯程式設計序轉換為機器語言,並且按照作業系統對可執行檔案格式的要求鏈結生成可執行程式。c源程式標頭檔案 預編譯處理 cpp 編譯程式本身 優化程式 匯程式設計序 鏈結程式 可執行檔案 1.編譯預處理 ...
C語言的編譯過程
編譯 編譯程式讀取源程式 字元流 對之進行詞法和語法的分析,將高階語言指令轉換為功能等效的彙編 再由匯程式設計序轉換為機器語言,並且按照作業系統對可執行檔案格式的要求鏈結生成可執行程式。流程 c源程式標頭檔案 預編譯處理 cpp 編譯程式本身 優化程式 匯程式設計序 鏈結程式 可執行檔案 1.編譯預...