編譯器的八大功能模塊
❶ 典型嵌入式linux軟體部分由哪些模塊組成他們的功能及相互聯系 Bootloader分為哪兩階段分
典型的嵌入式系統,軟體部分從下到上,分別是boot,kernel,rootfs,fsimg和上層應用。
起到的作用分別是,引導內核,啟動內核,掛載根文件系統,掛載實際文件系統,開啟上層應用主循環。
你問的這些問題,每一點都可以單獨拿出來,長篇大論的講很久了。建議去網上先看相關的資料。貪多求快是不好的,一個知識點一個知識點的掌握。
1.
GCC
大名鼎鼎的GNU的C/C++/Obj-C編譯器,
當前版本是2.8.1,
但據說與2.7.*有兼容性
問題.
而使用較廣的是gcc
2.7.2系列,
如RedHat5中帶的就是gcc
2.7.2.3
有時候在Cyrix上用gcc會有些問題,
因此有一套針對Cyrix特點的gcc
2.7.2.3
我這里有RedHat5的rpms
ftp://166.111.68.98/pub/Warez-CD/Huricane-contrib
(Cyrix
2.7.2.3
&
2.8.1)
其基本結構就是一個front
end和back
end,
/usr/bin/gcc
就是個front
end,
其kernel東西都放在
/usr/lib/gcc-lib下面,
cpp是C預處理器,
cc1*的1M多的就是編譯器的核心模塊了
cc1
C
compiler
cc1plus
C++
compiler
cc1obj
Object-C
compiler
但gcc並沒有集成Fortran的compiler,
一般要用f2c轉成C後才用gcc編譯
好象也還有個g77
Fortran
compiler吧?
gcc的不斷發展完善使許多commercial
compiler都相形見絀,
那當然,
gcc/emacs
都由GNU創始人Richard
Stallman手創,
是GNU的旗艦產品,
質量當然沒得說了:-)
由於
Unix平台的高度可移植性,
gcc幾乎在各種常見的Unix平台上都有,
即使是
Win32/DOS也有gcc的port.
比如說該死的Solaris普通版本連compiler都沒有,
也
就只好用gcc了...
2.
EGCS(Experimental/Enhanced
GNU
Compiler
System)
這是gcc的發展方向,
把fortran等編譯器集成進來,
也許還會有Pascal?
它的構造很清晰,
把對gcc的各種改進/port都集成回去.
如gcc
2.7系列據說是
沒有對Pentium進行優化的,
而egcs則把pgcc對Pentium的一些優化集成進去了
現在gcc的開發工作主要就是egcs,
由Cygnus公司領導(?),
這Cygnus公司還是很
不錯的,
還出了GNU-Win32,
SourceNavigator等,
是GNU的堅實擁護者:-))
http://egcs.cygnus.com
包括了C/C++/Obj-C/Fortran
編譯器,
當前最新版本1.0.2,
還在不斷開發中
昨天download發現KDE
Beta4都用egcs編譯了
:-)
Fortran集成進來後在/usr/lib/gcc-lib下又多了個f771的back
end,
當然
還是g77/f77
編譯
我這里有egcs
1.0.2
的rpm
在RH5-CD/collect下面
3.
PGCC(Pentium
GCC)
http://www.gcc.ml.org
針對Pentium
CPU進行了編譯器優化的compiler
pgcc據說用JPEG壓縮解壓縮測試最快可比gcc快
30%!
新版的pgcc都是基於egcs的,
以一個patch的形式release
❸ 編譯器如何確定源代碼的有效性
編譯器使用詞法分析、語法分析和語義分析三個程序功能模塊檢驗源程序是否符合相關規則,符合無錯就認為是有效的。
編譯器使用目標代碼生成程序功能模塊生成目標代碼,生成過程依據語法分析生成的語法樹和語義檢查及轉換規則,保證生成的目標代碼與源程序的演算法功能等價。
目標文件與源程序演算法功能是等價的,當然具有你說的演算法特性。演算法依靠指令的選用、指令的順序及存儲空間的使用來實現。沒有順序就沒有演算法。
❹ 計算機程序開發中都哪些常用的模塊呢
包管理庫提供了從 L ua 中載入模塊的基礎庫。只有一個導出函數直接放在全局環境中: require。 所有其它的部分都導出在表 package 中。
1.載入一個模塊。 這個函數首先查找 package.loaded 表, 檢測 modname 是否被載入過。 如果被載入過,require 返回 package.loaded[modname] 中保存的值。 否則,它試著為模塊尋找 載入器 。
2.require 遵循 package.searchers 序列的指引來查找載入器。如果改變這個序列,我們可以改變 require 如何查找一個模塊。 下列說明基於 package.searchers 的默認配置。
首先 require 查找 package.preload[modname] 。 如果這里有一個值,這個值(必須是一個函數)就是那個載入器。 否則 require 使用 Lua 載入器去查找 package.path 的路徑。 如果查找失敗,接著使用 C 載入器去查找 package.cpath 的路徑。 如果都失敗了,再嘗試 一體化 載入器 )。
3.每次找到一個載入器,require 都用兩個參數調用載入器:modname 和一個在獲取載入器過程中得到的參數。 (如果通過查找文件得到的載入器,這個額外參數是文件名。) 如果載入器返回非空值, require 將這個值賦給 package.loaded[modname]。 如果載入器沒能返回一個非空值用於賦給 package.loaded[modname], require 會在那裡設入 true 。 無論是什麼情況,require 都會返回 package.loaded[modname] 的最終值。
4.如果在載入或運行模塊時有錯誤, 或是無法為模塊找到載入器,require 都會拋出錯誤。
一個描述有一些為包管理准備的編譯期配置信息的串。 這個字元串由一系列行構成:
第一行是目錄分割串。 對於 Windows 默認是 '' ,對於其它系統是 '/' 。
第二行是用於路徑中的分割符。默認值是 ';' 。
第三行是用於標記模板替換點的字元串。 默認是 '?' 。
5.第四行是在 Windows 中將被替換成執行程序所在目錄的路徑的字元串。默認是 '!' 。
第五行是一個記號,該記號之後的所有文本將在構建 luaopen_ 函數名時被忽略掉。 默認是 '-'。
這個路徑被 require 在 C 載入器中做搜索時用到。
用於 require 控制哪些模塊已經被載入的表。 當你請求一個 modname 模塊,且 package.loaded[modname] 不為假時, require 簡單返回儲存在內的值。
這個變數僅僅是對真正那張表的引用; 改變這個值並不會改變 require 使用
讓宿主程序動態鏈接 C 庫 libname 。
5.當 funcname 為 "*", 它僅僅連接該庫,讓庫中的符號都導出給其它動態鏈接庫使用。 否則,它查找庫中的函數 funcname ,以 C 函數的形式返回這個函數。 因此,funcname 必須遵循原型 lua_CFunction (參見 lua_CFunction)。
6.這是一個低階函數。 它完全繞過了包模塊系統。和 require 不同, 它不會做任何路徑查詢,也不會自動加擴展名。 libname 必須是一個 C 庫需要的完整的文件名,如果有必要,需要提供路徑和擴展名。 funcname 必須是 C 庫需要的准確名字 (這取決於使用的 C 編譯器和鏈接器)。
這個函數在標准 C 中不支持。 因此,它只在部分平台有效 ( Windows ,Linux ,Mac OS X, Solaris, BSD, 加上支持 dlfcn 標準的 Unix 系統)。
❺ asd集成開發環境中包括什麼編譯器
asd集成開發環境中包括編譯器代碼編譯器、調試器、圖形用戶界面等工具。集成了代碼編寫功能、分析功能、編譯功能、調試功能等一體化的開發軟體服務套。所有具備這一特性的軟體或者軟體套(組)都可以叫集成開發環境。如微軟的Visual Studio系列,Borland的C++ Builder、Delphi系列等。該程序可以獨立運行,也可以和其它程序並用。
每個IDE的針對性不同,承載的編譯器不同,不同的語言有時需要不同的IDE,這里介紹幾個常用IDE。
❻ 開發C語言的編譯工具有哪些,各自的有什麼特點
現在已經沒有純C語言的編譯器了,都是用的C++編譯器,由於C++兼容C,所以使用C++編譯器,常用的有visual studio里的VC++編譯器,DEV C++編譯器,C++ bulider編譯器,建議使用前2個,VC++功能強大,可以編譯所有的windows程序,但是過於復雜,模塊多,體積大,不宜學,但是學好了前途(錢途)無量,DEV C++是個標準的C++編譯器,只有C++的基本功能,只能編寫win32程序,win32控制台程序,DLL動態鏈接庫,沒有VC++提供的強大的類庫支持。許多事要自己來完成。
❼ Emacs有什麼優點,用Emacs寫程序真的比IDE更方便嗎
一個IDE無非包括如下一些功能模塊:
一個編輯器;
一個編譯器;
一個調試器;
其它一些輔助功能,比如用滑鼠拖控制項。
什麼是最好的IDE?那肯定是
最好的IDE = 最好的編輯器 + 最好的編譯器 + 最好的調試器有哪個IDE做到這一點了嗎?只有Emacs。Emacs可以很方便地調用世界上最牛的編譯器(gcc),和調試器(gdb)。也許你會說「Emacs不能拖控制項啊」,沒錯,但在我看,拖控制項並不總是一個受人歡迎的功能,至少在系統編程的時候,它毫無用處。
而
且,從學習的角度來說,「用滑鼠編程」絕對是一個非常惡劣的習慣,因為這根本就是在逃避學習。「滑鼠化的IDE」隱藏了很多學生應該了解的技術細節。鄙學
院的絕大多數學生居然不知道C程序是要編譯之後才能運行的,他們以為寫好了程序,只要「按那個「感嘆號」按鈕」就可以了。這就是「滑鼠教學」的成果(你肯
定知道C編程這門課不歸我管)。Emacs可以幫助你克服「滑鼠依賴」,強迫你熟練地使用鍵盤。
更重要的是,Emacs不只是個IDE,
它是個ICE(Integrated Computing
Environment,這名字是我剛編出來的)。Emacs的設計目標就是,你裝了個Unix或者Linux系統,不需要裝任何其它軟體,只要裝一個
Emacs就夠了,它能幫助你完成所有的任務。也就是說,除了編程,你還可以用它寫論文、做幻燈片、瀏覽網頁、收發郵件、聊天、聽歌、看照片、玩游戲……
目前,好像除了直接在Emacs里看電影還不行,其它的都實現了。
Emacs如此「大一統」的設計目標顯然有違Unix的設計原則,do
one thing, and do it well. 但好在Emacs是模塊化的,它的每一個功能模塊都絕對遵循do one thing,
and do it well原則。你不喜歡那些功能,可以不裝它。
另外,還是從學習的角度來說,Emacs的學習曲線貌似比其他IDE要長不少,但是你
不必學習VC去寫C/C++,
不必學習eclipse去寫Java,
不必學習MS-Word去寫報告、幻燈片,
不必學習……
一句話,「Everything Emacs」,可以省下大量不必要的學習時間。人生苦短,何必讓你的生活被 VC/eclipse/MS-Word 搞得頭昏腦脹呢? 簡單而強大,本就是計科專業學生和非專業學生應有的不同 。
Emacs
絕對強大,但是否「方便」就不好說了。因為「方便」是一個很主觀的概念。反正,作為一個18年的老用戶,我肯定覺得方便。其他IDE太無聊了,那麼花哨而
龐大的東西,卻只適用於應用層編程。既不能用來寫論文,又不能做幻燈片,更不能用來聽歌、玩游戲。生活也太沒有樂趣了。
最後一點,Emacs還是一個巨大的開放社區,在這里你能結識到更酷一些的程序員。
Emacs入門還是很簡單的,它自帶了一個基礎教程。打開Emacs,按 Ctrl-h t , 教程就出現在你面前了。照著它邊看邊練,英文不太困難的話,一個小時應該可以走一遍了。之後,
Ctrl-h i m emacs就可以調出詳細的Emacs使用手冊;
Ctrl-h i m emacs lisp intro 可以調出Emacs Lisp入門教程;
Ctrl-h i m elisp 可以調出完整的elisp編程手冊。
當然,Google永遠是你最好的幫手。
❽ 編譯器的功能是什麼
1、編譯器就是將「一種語言(通常為高級語言)」翻譯為「另一種語言(通常為低級語言)」的程序。一個現代編譯器的主要工作流程:源代碼 (source code) → 預處理器 (preprocessor) → 編譯器 (compiler) → 目標代碼 (object code) → 鏈接器(Linker) → 可執行程序 (executables)。
2、工作方法:
1)、首先編譯器進行語法分析,也就是要把那些字元串分離出來。
2)、然後進行語義分析,就是把各個由語法分析分析出的語法單元的意義搞清楚。
3)、最後生成的是目標文件,也稱為obj文件。
4)、再經過鏈接器的鏈接就可以生成最後的EXE文件了。
5)、有些時候需要把多個文件產生的目標文件進行鏈接,產生最後的代碼。這一過程稱為交叉鏈接。
❾ C語言編譯器有哪些各有什麼特點
C語言編譯器目前主要有VC++、dev-C++、C-Free、win-TC、TC 2.0等等。
其中比較經典的VC++,微軟的產品,編譯器,鏈接器,運行,調試等功能於一體的強大開發工具,特點是功能十分強大,對於新手來說需要一段時間去摸索。
dev-C++是windows下一款開發c/c++的開發環境,使用gcc為編譯器,遵循標准,功能比較強大,語法高量,可以進行單步調試(這對排除錯誤很重要),進行斷點設置等功能,遵循C標准,是一款很強大的開發工具。
C-Free是一款支持多種編譯器的專業化C/C++集成開發環境(IDE)。利用C-Free,使用者可以輕松地編輯、編譯、連接、運行、調試C/C++程序。
TC 2.0:Borland公司的產品,在dos界面下編譯運行,小巧、靈活,但是不能使用滑鼠。
win-TC:在tc2.0的基礎上加上了界面,能夠使用滑鼠,具有語法高量,可以嵌入匯編等特點,對新手一些,拜託了不能用滑鼠的困難。
編譯器,簡單講,就是將「一種語言(通常為高級語言)」翻譯為「另一種語言(通常為低級語言)」的程序。一個現代編譯器的主要工作流程:源代碼 (source code) → 預處理器 (preprocessor) → 編譯器 (compiler) → 目標代碼 (object code) → 鏈接器(Linker) → 可執行程序 (executables)。
❿ c語言是幹嘛的
C語言是用來編寫系統的。
最開始,人們手裡除了機器碼就是匯編,沒有別的語言。但是匯編有很多硬體相關的特性,可移植性差。貝爾實驗室要解決這一問題,就研發了C語言。
C語言可以跨平台,一份代碼,配上不同的編譯器就可以在各大電腦上運行。除此之外,C語言效率驚人,在某些情況中,如果匯編水平中等以下,編出來的匯編甚至沒有C語言生成的機器碼快。
現在,NOIP(現更名為CSP-J和CSP-S)僅允許初賽和復賽使用三種語言:Pascal、C、C++,C語言的重要性不言而喻。
雖然邁入了互聯網時代,但是C語言的地位也沒有低到可以忽略。C語言在對空間和時間要求較高的設備(如嵌入式設備)中發揮著重要功能,也可以編寫各大語言的編譯器,有著比較重要的地位。
