計算機系統學習筆記 gcc和gdb

2021-09-26 22:50:53 字數 719 閱讀 5428

gcc main.c 會預設生成乙個a.out的可執行檔案

gcc main.c -o 會產生乙個 hello 可執行檔案

gcc main.c -o *** 會產生乙個 *** 可執行檔案

詳細過程可以分為四步:可以手動進行這四個步驟:

gcc -e main.c    (不會產生.i檔案)

gcc -e main.c >> main.i

第二步:編譯。 產生乙個字尾.s的檔案(彙編檔案)

gcc -s main.i     (大寫字母s)
第三步:彙編。產生字尾.o的object目標檔案

gcc -c hello.s
第四步:鏈結。 產生乙個字尾.o的可執行檔案

gcc hello.o -o hello
補充: 若要32位編譯

gcc -m32 要編譯的檔名 生成的.o檔名

要用gdb除錯的話加 -g

反彙編指令 objdump -d xx.c > 檔名

gcc -og -no-pie -fno-pic 源.c -o 生成名

-o是優化級別

計算機系統學習3 函式遞迴

遞迴演算法具有很好的可讀性和可維護性。所謂遞迴,是指利用分而治之的思想,將乙個複雜的問題,不斷簡化成簡單的易於處理的同型別的問題。乙個典型的遞迴包括以下2個部分 recursive case 將乙個複雜問題不斷簡化為乙個同型別的易於處理的簡單問題 base case 不斷簡化,一直簡化到乙個可以直接...

《深入理解計算機系統》學習筆記(一)

第1章計算機系統漫遊 1.1 位 bit 位元組 8位 二進位制檔案 其他檔案 1.2 hello.c hello.i 修改文字,例如將標頭檔案內容插入 hello.s 匯程式設計序 hello.o 可重定位目標程式 二進位制 printf.o hello 可執行目標程式 二進位制 gun gun ...

深入理解計算機系統學習筆記(一)

為了說明程式的編譯過程,我們用經典的hello world程式作為例子 include int main int argc,char const argv 在linux系統中,我們用gcc編譯器將源程式檔案helloworld.c編譯成可執行目標檔案helloworld。zengwh zengwh ...