編譯系統

編譯系統

編譯系統又稱為第二類編程環境開發者根據語言的規定編寫源程式,然後進行編譯、連線,生成執行檔,例如DOS作業系統加各類高級語言,如FORTRAN、PASCLL、C語言等就屬於這種類型接口平台,用於提供編譯任務輸入接口以及處理狀態信息輸出接口,並根據輸入的編譯任務生成任務名;編譯伺服器,用於解析所述任務名,獲得相應的原始碼,並進行編譯,同時產生所述編譯任務的處理狀態信息提供給所述接口平台。

基本介紹

  • 中文名:編譯系統
  • 外文名:Compiling system
  • 分類1:MTK分散式編譯系統
  • 分類2:DM2預編譯系統
  • 分類3:編譯系統CMake
過程,MTK分散式編譯系統,DM2預編譯系統,編譯系統CMake,反編譯系統,Symbian編譯系統,

過程

接收輸入的編譯任務;根據所述編譯任務生成任務名;解析獲得所述任務名對應的原始碼;編譯所述原始碼,並輸出所述編譯任務的處理狀態信息。上述技術方案中,通過接口平台接收編譯任務,由接口平台以任務名形式發起編譯請求,進行編譯,簡化了編譯輸入操作;處理狀態信息,通過接口平台實時提供給客戶端,簡化了編譯監控操作,大大節約了人力資源。

MTK分散式編譯系統

眾所周知,MTK平台使用ARM ADS進行編譯,一千多個源檔案,單機需要四五十分鐘才能完成,如果機器開著防毒軟體,速度會更慢。為了提高編譯速度,可以把防毒軟體暫時停掉,但是效果不會太明顯。解決問題的根本做法是利用網內閒置的機器,搭建一個分散式系統,多台機器同時編譯,可以收到明顯效果。
本系統由註冊伺服器、編譯伺服器和客戶端組成。網內啟動一個註冊伺服器,多個編譯伺服器。在MTK6223平台上,單機new一次需要50分鐘的項目,使用10個編譯伺服器同時編譯,new一次需要13分鐘。模組編譯之前是在客戶端工作的,需要9分鐘,其中為了實現分散式編譯,壓縮原始碼占用了2分鐘,檔案下載到編譯伺服器需要2分鐘。
從第一個模組編譯到最後link之前,10台機器僅用4分鐘就完成了1200個c檔案的編譯工作。最後的link是在本機進行的,幾十秒就完了。
我曾經試過18台機器同時編譯,1200個c檔案不到2分鐘就編譯完成了,當然下載時間需要3分鐘。對於開發人員來講,new一次不再是夢魘
當然,不能無限制地增加編譯伺服器,要考慮檔案傳輸所消耗的時間。MTK平台檔案很多,需要由客戶端向伺服器分發。一般地,一個客戶端與十個伺服器聯合編譯可以達到理想效果。

DM2預編譯系統

預編譯系統是DM2系統的重要組成部分。它支持在C程式中嵌入使用SQL語言,充分發揮語言數據類型豐富、處理方便靈活的優勢,又以SQL語言彌補高級語言難以描述資料庫操作的不足,為用戶提供了建立大型管理信息系統和處理複雜事務所需要的工作環境。
預編譯系統還支持互動式接口DM2-ISQL、套用開發工具集DM2-FORM、DM2-GRAPH、DM2-REPORT等工作環境。

編譯系統CMake

CMake就像是我們在uni上使用的make一樣,是用來管理怎樣編譯一個project的。它的好處是:
編譯系統
1) 跨越多個作業系統平台,包括當前套用最廣泛的windows,unix(包括Mac OS X).
2) 採用BSD風格的協定開放原始碼。據我個人閱讀協定檔案,沒發現協定與兩句BSD協定有什麼不同。
3) 它可以支持具有非常複雜的路徑、庫依賴的程式的編譯。比如它支持編譯個程式:它依賴於很多的庫以及其它一些代碼檔案,而每一個庫又有很多子目錄。。。
4) 像很多Make一樣,它會對曾經編譯的檔案做一些cache一遍加速以後的編譯。
使用這個編譯系統的時候,需要每個目錄/子目錄創建一個名為CMakeLists.txt的檔案。
這個項目歷史也算是比較悠久了,從2000年就開始了。
當前使用這個編譯系統的項目:llvm/clang。。。
我就是從clang的原始碼里發現的,郵件列表里有人推薦使用cmake,不要使用msvc的.sln檔案

反編譯系統

高級語言源程式經過 編譯 變成執行檔反編譯就是逆過程。
但是通常不能把執行檔變成高級語言原始碼,只能轉換成彙編程式
計算機軟體反向工程(Reversepengineering)也稱為計算機軟體還原工程,是指通過對他人軟體的目標程式(可執行程式)進行“逆向分析、研究”工作,以推導出他人的軟體產品所使用的思路、原理、結構、算法、處理過程、運行方法等設計要素,作為自己開發軟體時的參考,或者直接用於自己的軟體產品中。
反編譯是一個複雜的過程,所以越是高級語言,就越難於反編譯,但目前還是有許許多多的反編譯軟體:
VB: VBExplorer ;只能反編譯界面圖像,好像代碼不能完全反編譯
JAVA: JAD ;java的反編譯比較常見,所以反編譯比較完全 C++ : eXeScope

Symbian編譯系統

所謂編譯,就是在編譯程式讀取源程式字元流),對之進行詞法和語法的分析,將高級語言指令轉換為功能等效的
彙編代碼,再由彙編程式轉換為機器語言,並且按照作業系統對執行檔格式的要求連結生成可執行程式。
UNIX環境下的C編譯系統所遵循的也是這么一個一般的過程。值得注意的是這個過程並不是有某個單個程式完成的,而是有多個分別完成某一方面工作的程式組合完成的。這一設計思想同我們最初提到的UNIX系統軟體功能專一的特點是相符的。
歸納起來,可以將UNIX環境下C編譯系統的工作過程下圖所示。
C源程式頭檔案-->預編譯處理(cpp)-->編譯程式本身-->最佳化程式-->彙編程式-->連結程式-->執行檔
一般我們用cc命令來完成對源程式的編譯工作。此cc命令並不是一個二進制的可執行程式,而是一個shell命令檔案。它的工作就是依次調用我們上面所列出的各個完成某部分工作的具體程式,將指定的c源程式轉換成可執行的代碼。
UNIX系統中,實現C源程式到執行檔的這一轉換過程的工具是cc。在大多數系統中cc實際上是一個shell命令檔案。有些系統中的C編譯程式可能並不叫cc而是其它的一個什麼名稱,如Sun工作站上常用的gcc等等。但這些都無關緊要。大多數系統中C編譯命令的用法基本上都是類似的。我們這裡介紹的將以SVR4上的C編譯系統為基礎。
其中我們也要知道編譯系統也是一個系統軟體,而不是套用軟體。

相關詞條

熱門詞條

聯絡我們