導航:首頁 > 源碼編譯 > 編譯系統通過哪些部分

編譯系統通過哪些部分

發布時間:2025-03-25 11:37:32

編譯軟體具體是什麼啊為屬於系統軟體啊

編譯軟體為匯編語言匯編器,例如C語言編譯、連接器等等。

一般來講,系統軟體包括操作系統和一系列基本的工具(比如編譯器,資料庫管理,存儲器格式化,文件系統管理,用戶身份驗證,驅動管理,網路連接等方面的工具),是支持計算機系統正常運行並實現用戶操作的那部分軟體。

有代表性的系統軟體:操作系統,語言處理程序(如編譯軟體),資料庫管理,輔助程序。

(1)編譯系統通過哪些部分擴展閱讀:

語言處理程序:

編譯軟體CPU執行每一條指令都只完成一項十分簡單的操作,一個系統軟體或應用軟體,要由成千上萬甚至上億條指令組合而成。直接用基本指令來編寫軟體,是一件極其繁重而艱難的工作。

計算機只能直接識別和執行機器語言,因此要計算機上運行高級語言程序就必須配備程序語言翻譯程序,翻譯程序本身是一組程序,不同的高級語言都有相應的翻譯程序。

語言處理程序如匯編語言匯編器,C語言編譯、連接器等。

為了提高效率,人們規定一套新的指令,稱為高級語言,其中每一條指令完成一項操作,這種操作相對於軟體總的功能而言是簡單而基本的,而相對於CPU的一眇操作而言又是復雜的。用這種高級語言來編寫程序(稱為源程序)就象用預制板代替磚塊來造房子,效率要高得多。

但CPU並不能直接執行這些新的指令,需要編寫一個軟體,專門用來將源程序中的每條指令翻譯成一系列CPU能接受的基本指令(也稱機器語言)使源程序轉化成能在計算機上運行的程序。完成這種翻譯的軟體稱為高級語言編譯軟體,通常把它們歸入系統軟體。

目前常用的高級語言有VB、C++、JAVA等,它們各有特點,分別適用於編寫某一類型的程序,它們都有各自的編譯軟體。

參考資料:網路——系統軟體

② 編譯系統通常由哪幾個部分組成

一般說來,編譯程序主要由詞法分析程序、語法分析程序、語義分析程序、中間代碼生成程序、代碼優化程序、目標代碼生成程序、信息表管理程序、錯誤檢查處理程序組成。

③ 編譯程序包括哪幾個主要組成部分

編譯過程分為分析和綜合兩個部分,並進一步劃分為詞法分析、語法分析、語義分析、代碼優化、存儲分配和代碼生成等六個相繼的邏輯步驟。這六個步驟只表示編譯程序各部分之間的邏輯聯系,而不是時間關系。

編譯過程既可以按照這六個邏輯步驟順序地執行,也可以按照平行互鎖方式去執行。在確定編譯程序的具體結構時,常常分若干遍實現。對於源程序或中間語言程序,從頭到尾掃視一次並實現所規定的工作稱作一遍。每一遍可以完成一個或相連幾個邏輯步驟的工作。

(3)編譯系統通過哪些部分擴展閱讀:

對於c編譯程序來說,其語言的特點如下:

1、c語言是一種結構化語言。它層次清晰,便於按模塊化方式組織程序,易於調試和維護,而且表現能力和處理能力極強。

2、c語言具有豐富的運算符和數據類型,便於實現各類復雜的數據結構。它還可以直接訪問內存的物理地址,進行位(bit)一級的操作。

3、由於c語言實現了對硬體的編程操作,因此集高級語言和低級語言的功能於一體。它既可用於系統軟體的開發,也適合於應用軟體的開發。

4、此外,c語言還具有效率高、可移植性強等特點。因此它廣泛地移植到了各類各型計算機上,從而形成了多種版本。

④ C語言文件的編譯與執行的四個階段並分別描述

開發C程序有四個步驟:編輯、編譯、連接和運行。

任何一個體系結構處理器上都可以使用C語言程序,只要該體系結構處理器有相應的C語言編譯器和庫,那麼C源代碼就可以編譯並連接到目標二進制文件上運行。

1、預處理:導入源程序並保存(C文件)。

2、編譯:將源程序轉換為目標文件(Obj文件)。

3、鏈接:將目標文件生成為可執行文件(EXE文件)。

4、運行:執行,獲取運行結果的EXE文件。

(4)編譯系統通過哪些部分擴展閱讀:

將C語言代碼分為程序的幾個階段:

1、首先,源代碼文件測試。以及相關的頭文件,比如stdio。H、由預處理器CPP預處理為.I文件。預編譯的。文件不包含任何宏定義,因為所有宏都已展開,並且包含的文件已插入。我歸檔。

2、編譯過程是對預處理文件進行詞法分析、語法分析、語義分析和優化,生成相應的匯編代碼文件。這個過程往往是整個程序的核心部分,也是最復雜的部分之一。

3、匯編程序不直接輸出可執行文件,而是輸出目標文件。匯編程序可以調用LD來生成可以運行的可執行程序。也就是說,您需要鏈接大量的文件才能獲得「a.out」,即最終的可執行文件。

4、在鏈接過程中,需要重新調整其他目標文件中定義的函數調用指令,而其他目標文件中定義的變數也存在同樣的問題。

⑤ 探索 Lua5.2 內部實現:編譯系統(1) 概述

Lua 是一種輕量級、高效率的語言,其編譯系統的實現至關重要。Lua 的編譯過程需要將符合語法規則的chunk轉換為可運行的closure,這一過程需要高效且巧妙的設計。closure對象是Lua運行時的函數實例,proto對象則代表了closure的原型,存儲著函數的大部分信息,包括閉包與proto之間的關系,以及chunk與closure之間的對應關系。

編譯系統的任務是將chunk轉換為運行時可執行的closure。在這一過程中,需要理解chunk和closure的關系,以及chunk如何生成mainfunc proto,再為這個proto創建一個closure。每一個function statement都會生成一個對應的proto,並保存在外層函數的子函數列表中。所有最外層的function statement的proto會被保存到mainfunc proto的子函數列表中,形成以mainfunc為根節點的proto樹。

編譯系統被劃分為三個模塊:詞法分析、語法分析和指令生成。Lua使用手寫分析器進行詞法和語法分析,以提高效率。詞法分析將源代碼拆分成token,供語法分析使用。語法分析採用「遞歸下降」的方法,生成最終的指令,構建proto樹,即整個編譯過程。

詞法分析模塊相對簡單,主要任務是將源代碼分解為token。Token包括類型和語義信息,用於後續的語法分析。Lua的全局狀態信息由LexState結構體保存,它不僅包含詞法分析狀態,還包含了整個編譯系統的全局狀態。

語法分析和指令生成是整個編譯過程的核心。語法分析器驅動整個編譯過程,生成最終指令。分析過程中,詞法分析器生成指令,直接用於構建proto樹。編譯過程中,使用FuncState結構體來保存函數的編譯狀態數據,這些數據會隨著函數的壓棧和彈棧進行保存和恢復。全局數據Dyndata用於保存每個FuncState對應的局部變數描述列表、goto列表和label列表。

編譯系統的全局狀態信息存儲在LexState中,包含當前編譯函數的FuncState和全局的Dyndata數據。FuncState通過f引用Proto,保存生成指令的列表。h引用一個table,用於生成常量表,當遇到常量時,查找表中是否存在該常量,以節省內存。編譯過程會創建和銷毀FuncState和BlockCnt,以管理函數和塊的層次結構。

在整個語法分析過程中,Lua按照深度優先的順序遍歷FuncState樹和BlockCnt樹,只保存當前處理的編譯狀態,以減少內存使用。在分析過程中,Lua不構建完整的語法樹對象,而是將過程中的語法結構保存在函數棧中,分析完成後立即丟棄。長跳轉等異常處理機制用於處理錯誤,確保編譯狀態數據在出錯時自動銷毀。

在C stack中保存編譯狀態數據的原因與異常處理機制相關,使用longjump機制處理錯誤,確保所有當前的編譯狀態數據在出錯時自動銷毀。

linux編譯內核步驟

一、准備工作
a) 首先,你要有一台PC(這不廢話么^_^),裝好了Linux。
b) 安裝好GCC(這個指的是host gcc,用於編譯生成運行於pc機程序的)、make、ncurses等工具。
c) 下載一份純凈的Linux內核源碼包,並解壓好。

注意,如果你是為當前PC機編譯內核,最好使用相應的Linux發行版的源碼包。

不過這應該也不是必須的,因為我在我的Fedora 13上(其自帶的內核版本是2.6.33.3),就下載了一個標準的內核linux-2.6.32.65.tar.xz,並且順利的編譯安裝成功了,上電重啟都OK的。不過,我使用的.config配置文件,是Fedora 13自帶內核的配置文件,即/lib/moles/`uname -r`/build/.config

d) 如果你是移植Linux到嵌入式系統,則還要再下載安裝交叉編譯工具鏈。

例如,你的目標單板CPU可能是arm或mips等cpu,則安裝相應的交叉編譯工具鏈。安裝後,需要將工具鏈路徑添加到PATH環境變數中。例如,你安裝的是arm工具鏈,那麼你在shell中執行類似如下的命令,假如有類似的輸出,就說明安裝好了。
[root@localhost linux-2.6.33.i686]# arm-linux-gcc --version
arm-linux-gcc (Buildroot 2010.11) 4.3.5
Copyright (C) 2008 Free Software Foundation, Inc.
This is free software; see the source for ing conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
註:arm的工具鏈,可以從這里下載:回復「ARM」即可查看。

二、設置編譯目標

在配置或編譯內核之前,首先要確定目標CPU架構,以及編譯時採用什麼工具鏈。這是最最基礎的信息,首先要確定的。
如果你是為當前使用的PC機編譯內核,則無須設置。
否則的話,就要明確設置。
這里以arm為例,來說明。
有兩種設置方法():

a) 修改Makefile
打開內核源碼根目錄下的Makefile,修改如下兩個Makefile變數並保存。
ARCH := arm
CROSS_COMPILE := arm-linux-

注意,這里cross_compile的設置,是假定所用的交叉工具鏈的gcc程序名稱為arm-linux-gcc。如果實際使用的gcc名稱是some-thing-else-gcc,則這里照葫蘆畫瓢填some-thing-else-即可。總之,要省去名稱中最後的gcc那3個字母。

b) 每次執行make命令時,都通過命令行參數傳入這些信息。
這其實是通過make工具的命令行參數指定變數的值。
例如
配置內核時時,使用
make ARCH=arm CROSS_COMPILE=arm-linux- menuconfig
編譯內核時使用
make ARCH=arm CROSS_COMPILE=arm-linux-

注意,實際上,對於編譯PC機內核的情況,雖然用戶沒有明確設置,但並不是這兩項沒有配置。因為如果用戶沒有設置這兩項,內核源碼頂層Makefile(位於源碼根目錄下)會通過如下方式生成這兩個變數的值。
SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \
-e s/arm.*/arm/ -e s/sa110/arm/ \
-e s/s390x/s390/ -e s/parisc64/parisc/ \
-e s/ppc.*/powerpc/ -e s/mips.*/mips/ \
-e s/sh[234].*/sh/ )
ARCH?= $(SUBARCH)
CROSS_COMPILE ?=

經過上面的代碼,ARCH變成了PC編譯機的arch,即SUBARCH。因此,如果PC機上uname -m輸出的是ix86,則ARCH的值就成了i386。

而CROSS_COMPILE的值,如果沒配置,則為空字元串。這樣一來所使用的工具鏈程序的名稱,就不再有類似arm-linux-這樣的前綴,就相當於使用了PC機上的gcc。

最後再多說兩句,ARCH的值還需要再進一步做泛化。因為內核源碼的arch目錄下,不存在i386這個目錄,也沒有sparc64這樣的目錄。

因此頂層makefile中又構造了一個SRCARCH變數,通過如下代碼,生成他的值。這樣一來,SRCARCH變數,才最終匹配到內核源碼arch目錄中的某一個架構名。

SRCARCH := $(ARCH)

ifeq ($(ARCH),i386)
SRCARCH := x86
endif

ifeq ($(ARCH),x86_64)
SRCARCH := x86
endif

ifeq ($(ARCH),sparc64)
SRCARCH := sparc
endif

ifeq ($(ARCH),sh64)
SRCARCH := sh
endif

三、配置內核

內核的功能那麼多,我們需要哪些部分,每個部分編譯成什麼形式(編進內核還是編成模塊),每個部分的工作參數如何,這些都是可以配置的。因此,在開始編譯之前,我們需要構建出一份配置清單,放到內核源碼根目錄下,命名為.config文件,然後根據此.config文件,編譯出我們需要的內核。

但是,內核的配置項太多了,一個一個配,太麻煩了。而且,不同的CPU架構,所能配置的配置項集合,是不一樣的。例如,某種CPU的某個功能特性要不要支持的配置項,就是與CPU架構有關的配置項。所以,內核提供了一種簡單的配置方法。

以arm為例,具體做法如下。

a) 根據我們的目標CPU架構,從內核源碼arch/arm/configs目錄下,找一個與目標系統最接近的配置文件(例如s3c2410_defconfig),拷貝到內核源碼根目錄下,命名為.config。

注意,如果你是為當前PC機編譯內核,最好拷貝如下文件到內核源碼根目錄下,做為初始配置文件。這個文件,是PC機當前運行的內核編譯時使用的配置文件。
/lib/moles/`uname -r`/build/.config
這里順便多說兩句,PC機內核的配置文件,選擇的功能真是多。不編不知道,一編才知道。Linux發行方這樣做的目的,可能是想讓所發行的Linux能夠滿足用戶的各種需求吧。

b) 執行make menuconfig對此配置做一些需要的修改,退出時選擇保存,就將新的配置更新到.config文件中了。

閱讀全文

與編譯系統通過哪些部分相關的資料

熱點內容
如何設置windows遠程連接到伺服器 瀏覽:8
安卓常見開源框架源碼分析 瀏覽:944
舊iphone如何簡單下app 瀏覽:220
雲伺服器全網最低價 瀏覽:56
戴爾伺服器怎麼查看內存槽位 瀏覽:621
空調壓縮機工作電流 瀏覽:421
c語言編程小項目 瀏覽:475
阿里雲mc伺服器mcbbs 瀏覽:850
安卓平板打不了字怎麼辦 瀏覽:514
linux用戶提示符 瀏覽:33
編譯卸載工具app 瀏覽:214
壓縮袋怎麼封口 瀏覽:254
人臉識別演算法c語言 瀏覽:379
外網伺服器是干什麼用的 瀏覽:408
平面圖形面積計演算法 瀏覽:544
手機shell命令 瀏覽:93
拯救者有解壓軟體嗎 瀏覽:408
加密簡訊認證限額 瀏覽:971
程序員職述報告ppt 瀏覽:157
程序員有什麼重要的證書 瀏覽:306