編譯系統
編譯系統又稱為第二類編程環境。開發者根據語言的規定編寫源程序,然後進行編譯、連接,生成可執行文件,例如DOS操作系統加各類高級語言(如FORTRAN、PASCLL、C語言等)就屬於這種類型接口平台。用於提供編譯任務輸入接口以及處理狀態信息輸出接口,並根據輸入的編譯任務生成任務名;編譯服務器,用於解析所述任務名,獲得相應的源代碼,並進行編譯,同時產生所述編譯任務的處理狀態信息提供給所述接口平台。
- 中文名:編譯系統
- 外文名:Compiling system
- 分類1:MTK分布式編譯系統
- 分類2DM2:預編譯系統
- 分類3:編譯系統CMake
目錄
過程
接受輸入的編譯任務;根據所述編譯任務生成任務名;解析獲得所述任務名對應的源代碼;編譯所述源代碼,並輸出所述編譯任務的處理狀態信息。上述技術方案中,通過接口平台接收編譯任務,由接口平台以任務名形式發起編譯請求,進行編譯,簡化了編譯輸入操作;處理狀態信息,通過接口平台實時提供給客戶端,簡化了編譯監控操作,大大節約了人力資源。
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 ;只能反編譯界面圖像,好像代碼不能完全反編譯
Symbian編譯系統
所謂編譯,就是在編譯程序讀取源程序(字符流),對之進行詞法和語法的分析,將高級語言指令轉換為功能等效的匯編代碼再由匯編程序轉換為機器語言,並且按照操作系統對可執行文件格式的要求鏈接生成可執行程序。
UNIX環境下的C編譯系統所遵循的也是這麼一個一般的過程。值得注意的是這個過程並不是由某個程序獨立完成的,而是由多個分別完成某一方面工作的程序組合完成的。這一設計思想同我們最初提到的UNIX系統軟件功能專一的特點是相符的。
歸納起來,可以將UNIX環境下C編譯系統的工作過程總結如下:
C源程序頭文件-->預編譯處理(cpp)-->編譯程序本身-->優化程序-->匯編程序-->鏈接程序-->可執行文件
一般我們用cc命令來完成對源程序的編譯工作。此cc命令並不是一個二進制的可執行程序,而是一個shell命令文件。它的工作就是依次調用我們上面所列出的各個完成某部分工作的具體程序,將指定的c源程序轉換成可執行的代碼。
在UNIX系統中,實現C源程序到可執行文件的這一轉換過程的工具是cc。在大多數系統中cc實際上是一個shell命令文件。有些系統中的C編譯程序可能並不叫cc而是其它的一個什麼名稱,如Sun工作站上常用的gcc等等。但這些都無關緊要。大多數系統中C編譯命令的用法基本上都是類似的。我們這裡介紹的將以SVR4上的C編譯系統為基礎。
其中我們也要知道編譯系統也是一個系統軟件,而不是應用軟件。
視頻
Apk反編譯 - 萬碼千鈞