Tiny C Compiler简介-wiki
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)规范[1]亦符合新版的ISO C99标准规范,与GNU C扩展的内嵌汇编语言(即inline assembler)功能汇编语言。
| 开发者 | Fabrice Bellard |
|---|---|
| 稳定版本 | 0.9.27
(2017年12月17日,21个月前)
|
| 源代码库 |
|
| 编程语言 | C语言及汇编语言 |
| 操作系统 | Linux、Unix、Windows |
| 类型 | C语言编译器 |
| 许可协议 | GNU宽通用公共许可证 |
| 网站 | http://bellard.org/tcc/ |
更新项目[编辑]
- 支持C99 VLA规范
- 可产生make的dependencies(-MD/-MF)
- 支持多种平台的程序编写,例:x86-64、ARM、OSX、WinCE、kFreeBSD、Hurd
- 修正一些已知的bug
特色功能[编辑]
TCC与其他C语言编译器的不同处在于:
- 容量小,软件大小约为1MB左右,可存储于1.44MB的磁盘片中使用。
- 速度快,以TCC开发的程序可执行于x86(16/32位)与 x86-64(64位)环境中,据开发者说,运行比GCC较来得相当快速。[2]程序亦可以包含汇编语言(inline assembler)于其中运行与编译。
- 无限制,其他C语言的动态Library祗要符合ISO C99规范,皆可以给予TCC来使用与编译。
- 安全性,TCC包含一个可选的memory(存储器)和boundschecker(程序检测器),经过检测的代码可以随意地混合于标准代码内。
- 其他,TCC为命令行式的使用,当前并无集成性开发环境,但可以配合其他的编辑软件使用(如:UltraEdit ...等)。
新版本特色[编辑]
- 0.9.27版本取消了原有的”tiny_impdef.exe”(产生DLL文件)与”tiny_libmaker.exe”。
- 在64位版本中提供可编译32位的编译器i386-win32-tcc.exe,而在32位版本中则提供64位的编译器x86_64-win32-tcc.exe,使用方式相同于tcc的指令。
- 原编译DLL功能,则以指令方式合并到tcc内,以tcc -impdef *.dll方式来使用
用途[编辑]
著名的 TCC 应用包括:
- TCCBOOT[3],一个可以在大约 10 秒内从源码启动 Linux内核的引导程序。该引导程序可以从硬盘中读取 Linux 源代码,将可执行指令写入内存并执行。
- TCC 曾被用于演示对软件后门的防御。 [4]
- TCC 曾被用于编译 GCC,虽然需要不少补丁才能完成这个操作。
- Cinpy[5],一个允许在Python模块中添加C函数的库。这些 C 函数在运行时使用 TCC 编译,然后通过 ctypes 库在 Python 代码中调用。
- 被安装在 JSLinux[6] ,一个能在浏览器中运行 Linux 和其它操作系统的虚拟机(也是由 Bellard 开发的)。
- 被用于编译超微型国际象棋引擎。[7]
- TCC 曾被内置于 Google Android 系统,于 Andriod 2.0 版本中。[8][9]
开发历史[编辑]
TCC 项目起源于 OTCC (Obfuscated TCC,即代码混淆过的 TCC),这是 Bellard 为赢得 2001 年国际C语言混乱代码大赛(IOCCC)编写的一个程序。其后,Bellard 反混淆并延伸发展了该程序,于是有了 TCC。[10]
在 2012 年 2 月 4 日之前的某个时间, Bellard 在 TCC 的官方网站上宣布他不再参与 TCC 的维护工作。[11]
自从 Bellard 离开 TCC 项目以来,已经有不少组织和个人分发补丁或创建维护分支,为 TCC 提供构建支持以及问题修复。
参考文献[编辑]
引用[编辑]
- ^ Tiny C Compiler Reference Documentationaccessed on 2008-08-07]
- ^ Tiny C Compiler官方网站上关于编译速度的对比
- ^ TCCBOOT
- ^ Wheeler, David A. Countering Trusting Trust through Diverse Double-Compiling. ACSAC.
- ^ Cinpy 互联网档案馆的存档,存档日期2008-11-20.
- ^ JavaScript Linux
- ^ Super Micro-Max Chess Engine
- ^ libacc : Android 2.0内置的轻量级C Compiler
- ^ 透过libtcc来扩展C语言
- ^ Bellard, Fabrice. Obfuscated Tiny C Compiler
- ^ archive.org 上最古老的 TCC 官方网站快照,宣布 Bellard 停止维护 TCC 项目。
来源[编辑]
- 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
外部链接[编辑]
参见[编辑]
| 维基教科书中的相关电子教程:TCC使用指南 |
- Portable C Compiler(PCC)
- Small-C
- 内联汇编(inline assembler)
Tiny C Compiler简介-wiki的更多相关文章
- Tiny PXE Server简介
Tiny PXE Server简介Tiny PXE Server是一款小巧而功能强大的网启软件.支持DHCP TFTP HTTP BINL DNS等多个协议,支持grub4dos,pxelinux,i ...
- Tiny C Compiler(Tcc)
catalog . Tcc introduction . Tcc安装配置 . Tcc Programing 1. Tcc introduction TCC基本和GCC兼容 . 符合ANSI C(C8 ...
- Retrofit 简介 wiki 文档
简介 Type-safe HTTP client for Android and Java by Square, Inc. GitHub主页:https://github.com/square/ret ...
- Graph-tool简介 - wiki
graph-tool is a Python module for manipulation and statistical analysis of graphs[disambiguation nee ...
- TCC(Tiny C Compiler)介绍
TCC是一个超小.超快的标准C语言编译器.她可以从这里(http://bellard.org/tcc/)下载到:注意,要下载http://download.savannah.nongnu.org/re ...
- TCC : Tiny C Compiler (2018-2-6)
饭墙下载,有缘上传: https://files.cnblogs.com/files/bhfdz/tcc-0.9.27-win32-bin.zip https://files.cnblogs.com/ ...
- Wiki知识介绍
Wiki简介 Wiki一词来源于夏威夷语的“wee kee wee kee”,原本是“快点快点”的意思,被译为“维基”或“维客”.一种多人协作的写作工具.Wiki站点可以有多人(甚至任何访问者)维护, ...
- 如何基于TencentOS tiny,快速打造属于自己的IoT小应用?
导语 | 近日,云+社区技术沙龙“腾讯开源技术”圆满落幕.本次沙龙邀请了多位腾讯技术专家,围绕腾讯开源与众多开发者进行探讨,深度揭秘了腾讯开源项目TencentOS tiny.TubeMQ.Kona ...
- C#之父 Anders Hejlsberg
Anders Hejlsberg (born December 1960)[2] is a prominent Danish software engineer who co-des ...
随机推荐
- PHP 23种设计模式
学习PHP,对设计模式永远是逃不掉的:今天把php23种设计模式及其demo好好整理如下: 记录PHP关于23种设计模式的简单Demo. Demo地址:https://segmentfault.com ...
- 常用Tables控件介绍(一)
1.DataTables Datatables是一款jquery表格插件.它是一个高度灵活的工具,可以将任何HTML表格添加高级的交互功能. 分页,即时搜索和排序 几乎支持任何数据源:DOM, jav ...
- 45 容器(四)——手写LinkedList
概念 LinkedList级双向链表,它的单位是节点,每一个节点都要一个头指针和一个尾指针,称为前驱和后继.第一个节点的头指针指向最后一个节点,最后一个节点的尾指针指向第一个节点,形成环路. 链表增删 ...
- SpringCloud入门使用
目的: 1.springcloud简介 入门案例 2.注册中心eureka springcloud简介 推荐一个springcloud讲解详细的博客:https://blog.csdn.net/qq3 ...
- Js学习04--对象
1.如何辨别js中的对象 除了五种基本的数据类型,其他的都是对象.万物皆对象. 2.Js中对象的分类 1)内建对象 由ES标准定义的对象,在任何的ES实现中都可以使用. eg:String.Numbe ...
- appium实例1:启动淘宝app
1.在android-sdk里面双击SDK-manager,下载buidl-tools 2.勾选build-tools,随便选一个版本,我这里选的是24的版本 3.下载完成后,在D:\androi ...
- caffe基础入门
学的太浅,先放一个别人写的吧,等自己摸清楚回来搞搞. https://blog.csdn.net/cham_3/article/details/72141753
- node-red 使用 创建第一个流程
前言 这只是一个简单的示例,具体详细文档去官网查看 官网指南:https://nodered.org/docs/user-guide/ 打开浏览器,进入编辑器页面:http://localhost:1 ...
- JPA、Hibernate、Spring data jpa之间的关系,以及和springboot的整合
什么么是JPA? 全称Java Persistence API,可以通过注解或者XML描述[对象-关系表]之间的映射关系,并将实体对象持久化到数据库中. 为我们提供了: 1)ORM映射元数据:JPA支 ...
- Python3 MySQL
首先安装pymysql pip install pymysql 准备数据库:创建一个数据库testdb mysql实例: import pymysql #打开数据库连接,使用数据库所在的IP127. ...