日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

程序编译连接原理

發布時間:2024/4/18 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 程序编译连接原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

main.c–>main需要四步:預處理,編譯,匯編,連接

1.預編譯階段:gcc -E main.c -o main.i

預編譯階段主要做六件事:
(1) 刪除所有的“#define”,并且展開所有的宏定義;
(2) 處理所有的條件預編譯指令,“#if”、“#ifdef”、“#endif”等;
(3) 處理“#include”預編譯指令,將被包含的文件插入到該預編譯指令的位置;
(4) 刪除所有的注釋;
(5) 添加行號和文件名標識,以便于編譯器產生調試用的符號信息及編譯時產生編譯錯誤和警告時顯示行號;
(6) 保留所有的#pragma 編譯器指令,因為編譯器需要使用它們。
預編譯階段的語言還屬于高級語言,計算機不能理解.

2.編譯階段:gcc -S main.i -o main.s

編譯階段主要有五件事:
(1) 進行詞法分析;
(2) 語法分析;
(3) 語義分析;
(4) 代碼優化;
(5) 生成匯編指令
編譯階段的語言屬于低級語言.

3.匯編階段:gcc -c main.s -o main.o

匯編階段主要是翻譯指令(即將低級語言翻譯成機器語言).

4.鏈接階段:gcc -o main.o main

鏈接階段主要做匯編階段未做的事情:
(1) 強弱符號的處理;
(2) 外部符號的處理;
(3) 指令段中虛假地址和虛假偏移的處理;
(4) 符號的重定位.

補充:
<stdio.h>里面放的是申明;
Windows中的可執行文件的格式是PE格式;
Linux中可執行文件的格式是ELF格式.

總結

以上是生活随笔為你收集整理的程序编译连接原理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。