1. 嵌入式軟體中GCC編譯,匯編,鏈接,調試的作用
GCC:是一套由GNU工程開發的支持多種編程語言的編譯器。將程序代碼編譯成機器語言。
編譯:1、利用編譯程序從源語言編寫的源程序產生目標程序的過程。
2、用編譯程序產生目標程序的動作。 編譯就是把高級語言變成計算機可以識別的2進制
語言,計算機只認識1和0,編譯程序把人們熟悉的語言換成2進制的。 編譯程序把一
個源程序翻譯成目標程序的工作過程分為五個階段:詞法分析;語法分析;語義檢查
和中間代碼生成;代碼優化;目標代碼生成。主要是進行詞法分析和語法分析,又稱
為源程序分析,分析過程中發現有語法錯誤,給出提示信息。
匯編:把匯編語言翻譯成機器語言的過程稱為匯編,在匯編語言中,用助記符(Memoni)代替操作
碼,用地址符號(Symbol)或標號(Label)代替地址碼。這樣用符號代替機器語言的二進制
碼,就把機器語言變成了匯編語言
連接:用來把要執行的程序與庫文件或其他已經翻譯好的子程序(能完成一種獨立功能的程序
模塊)連接在一起,形成機器能執行的程序。
調試:編好程序後,用各種手段進行查錯和排錯的過程。
2. C腳本編譯和鏈接的問題
編譯器分為前端和後端
前端生成平台無關的中間代碼
後端根據目標機器產生目標代碼
連接器會根據你的目標平台,鏈接不同的庫
windows下的c標准函數是msvcrt庫實現的
linux下的c標准函數是libc庫實現的
雖然編譯階段產生的目標代碼是一樣的,但是目標系統不一樣,連入的庫也不一樣,編譯器依靠這種機制實現同一代碼在不同平台上的編譯
比如printf函數在windows/linux下的實現就不一樣,是根據特定系統提供的庫實現的
3. c語言裡面的編譯和鏈接是怎麼回事啊
C/C++語言的完整編譯過程是
一、預編譯
處理#define #if #include這類#開頭的語句,這些稱為預編譯指令。這個過程中會把.h文件和.c/.cpp文件組合成最終交給compile過程的原文件。這個原文件是不包含任何#開頭的語句的。所有#define定義的宏也會被替換。
二、編譯
把上面那個原文件編譯成.o或者VC里是.obj文件。這個文件保存了機器碼化的函數、函數的描述、全局變數的描述、乃至段的描述等等。
三、連接
把可執行程序需要的所有的編譯過程產生的.o或者.obj文件組合到一起。(這里也包括.lib文件,.lib文件件本質上就是打包的.obj文件集合)。另外連接過程還會組合一些其他數據,比如資源、可執行文件頭等等。
4. 如何理解程序的編譯,鏈接,載入等各個過程
編譯是將高級程序語言(c,c++,c#等)轉換成匯編語言,並且將變數翻譯成寄存器
鏈接是將多個編譯過的文件組合成一個文件,並且加入程序調用的庫函數等所需的其他資源
載入是將以上處理過的後生成的指令(二進制碼)在執行前載入到內存中,並提供地址翻譯。
5. 編譯、鏈接和交叉鏈接的區別與聯系
1、鏈接是將目標代碼與其他對象文件(例如庫文件)合並成單個可執行文件的過程。在鏈接納運過程中,符號解析和地址重差茄旦定向等操作被執行。
2、虛擾交叉鏈接是指將不同的目標文件和庫文件進行鏈接,以生成適用於特定平台或操作系統的可執行文件。它通常用於開發跨平台應用程序。