Tiny C Compiler
![本頁使用了標題或全文手工轉換](http://images.weserv.nl/?url=//upload.wikimedia.org/wikipedia/commons/thumb/c/cd/Zh_conversion_icon_m.svg/35px-Zh_conversion_icon_m.svg.png)
![]() |
開發者 | Fabrice Bellard |
---|---|
當前版本 |
|
源代碼庫 | |
編程語言 | C語言及組合語言 |
操作系統 | Linux、Unix、Windows |
類型 | C語言編譯器 |
許可協議 | GNU寬通用公共許可證 |
網站 | http://bellard.org/tcc/ |
Tiny C Compiler(縮寫為TCC、tCc或TinyCC)是一個用於x86(16/32位元)或x86-64(64位元)系統的C編譯器,開發者為Fabrice Bellard。軟體是設計用於低階電腦環境,或是於磁碟容量有限的空間中(1.44磁片或是硬碟)。軟體可以適用於Windows、Linux、Unix作業系統,而最新版本為0.9.27(2017年12月17日)。TCC是在GNU寬通用公共許可證(LGPL)協定規範下發布。
TCC符合ANSI C(C89/C90)規範[2]亦符合新版的ISO C99標準規範,與GNU C擴展的內嵌組合語言(即inline assembler)功能匯編語言。
實現狀態
- 支援C99 VLA規範
- 完全支援C89,基本符合C99規範
- 可產生make dependencies(-MD/-MF)
- 支援多種平台的目標代碼生成,例:x86-64、ARM、OSX、WinCE、kFreeBSD、Hurd
特色功能
TCC與其他C語言編譯器的不同處在於:
- 容量小,軟體大小約為1MB左右,可儲存於1.44MB的磁碟片中使用。
- 速度快,以TCC開發的程式可執行於x86(16/32位元)與 x86-64(64位元)環境中,據開發者說,執行比GCC較來得相當快速。[3]程式亦可以包含組合語言(inline assembler)於其中執行與編譯。
- 無限制,其他C語言的動態Library祗要符合ISO C99規範,皆可以給予TCC來使用與編譯。
- 安全性,TCC包含一個可選的記憶體邊界檢查,經過檢測的程式碼可以隨意地混合於標準程式碼內。
- 其他,TCC為命令列式的使用,目前並無整合性開發環境,但可以配合其他的編輯軟體使用(如:UltraEdit ...等)。
用途
著名的 TCC 應用包括:
- TCCBOOT[4],一個可以在大約 10 秒內從源碼啟動 Linux內核的啟動程式。該啟動程式可以從硬盤中讀取 Linux 源代碼,將可執行指令寫入內存並執行。
- TCC 曾被用於演示對軟體後門的防禦。 [5]
- TCC 曾被用於編譯 GCC,雖然需要不少補丁才能完成這個操作。
- Cinpy[6],一個允許在Python模塊中添加C函數的庫。這些 C 函數在運行時使用 TCC 編譯,然後通過 ctypes 庫在 Python 代碼中調用。
- 被安裝在 JSLinux[7] ,一個能在瀏覽器中運行 Linux 和其它操作系統的虛擬機(也是由 Bellard 開發的)。
- 被用於編譯超微型國際象棋引擎。[8]
- TCC 曾被內建於 Google Android 系統,於 Android 2.0 版本中。[9]
開發歷史
TCC 項目起源於 OTCC (Obfuscated TCC,即代碼混淆過的 TCC),這是 Bellard 為贏得 2001 年國際C語言混亂代碼大賽(IOCCC)編寫的一個程序。其後,Bellard 反混淆並延伸發展了該程序,於是有了 TCC。[10]
在 2012 年 2 月 4 日之前的某個時間, Bellard 在 TCC 的官方網站上宣布他不再參與 TCC 的維護工作。[11]
自從 Bellard 離開 TCC 項目以來,已經有不少組織和個人分發補丁或創建維護分支,為 TCC 提供構建支持以及問題修復。
參考文獻
引用
- ^ http://repo.or.cz/tinycc.git/commit/d348a9a51d32cece842b7885d27a411436d7887b; 檢索日期: 2018年1月19日.
- ^ Tiny C Compiler Reference Documentation (頁面存檔備份,存於網際網路檔案館) accessed on 2008-08-07]
- ^ Tiny C Compiler官方網站上关于编译速度的对比. [2019-03-01]. (原始內容存檔於2019-02-19).
- ^ TCCBOOT. [2019-03-01]. (原始內容存檔於2011-05-18).
- ^ Wheeler, David A. Countering Trusting Trust through Diverse Double-Compiling (頁面存檔備份,存於網際網路檔案館). ACSAC.
- ^ Cinpy. [2019-03-01]. (原始內容存檔於2008-11-20).
- ^ JavaScript Linux. [2019-03-01]. (原始內容存檔於2011-07-09).
- ^ Super Micro-Max Chess Engine. [2019-03-01]. (原始內容存檔於2019-03-02).
- ^ libacc : Android 2.0內建的輕量級C Compiler. [2012-05-06]. (原始內容存檔於2010-10-23).
- ^ Bellard, Fabrice. Obfuscated Tiny C Compiler (頁面存檔備份,存於網際網路檔案館)
- ^ archive.org 上最古老的 TCC 官方网站快照,宣布 Bellard 停止维护 TCC 项目。. [2012-02-04]. (原始內容存檔於2011-04-08).
來源
- Tiny C Compiler Reference Documentation(頁面存檔備份,存於網際網路檔案館) accessed on 2008-08-07
- Glöckner, Daniel. Re: Tinycc-devel (no subject)(頁面存檔備份,存於網際網路檔案館), September 8, 2006.
- a b grischka, GCC by TCC (some fixes)(頁面存檔備份,存於網際網路檔案館), 29 Sep 2005
- Wheeler, David A. Countering Trusting Trust through Diverse Double-Compiling. ACSAC(頁面存檔備份,存於網際網路檔案館).
- Bellard, Fabrice. Obfuscated Tiny C Compiler(頁面存檔備份,存於網際網路檔案館)
- Bellard Fabrice Project Homepage(頁面存檔備份,存於網際網路檔案館)
外部連結
- Tiny C Compiler官方網站(頁面存檔備份,存於網際網路檔案館)
- Tiny C Compiler develop archive(頁面存檔備份,存於網際網路檔案館)
- Tiny C Compiler GIT(頁面存檔備份,存於網際網路檔案館)
參見
- Portable C Compiler(PCC)
- Small-C
- 內聯彙編(inline assembler)
|