首页 编程 C/C++ 查看内容

TCC研究(1): Tiny C Compiler最小的C语言编译器,自己编译自己

2019-11-20 08:33 |来自: 互联网 3028 0

摘要: 最近,在学习编译器技术, 研究了一下TCC, 记录一下。Tiny C Compiler(简称TCC, 或Tiny CC)是世界上最小的C语言编译器,而且是开源的, 小到只有约100K. (VC, GCC动不动几十M几百M的, 汗)别看它小, 功能还是很强. 可以编译所有C99标准的ANSI C程序 , 支持CPU包括:X86 32或64位, ARM,支持Windows, ...
关键词: TCC 编译 编译器 hello 语言 dll exe 运行 一下 文件

最近,在学习编译器技术, 研究了一下TCC, 记录一下。

Tiny C Compiler(简称TCC, 或Tiny CC)是世界上最小的C语言编译器,而且是开源的, 小到只有约100K. (VC, GCC动不动几十M几百M的, 汗)

别看它小, 功能还是很强. 可以编译所有C99标准的ANSI C程序 , 支持CPU包括:X86 32或64位, ARM,支持Windows, Linux, OSX.(跨平台跨系统的能力,比VC强)

TCC是由大牛Fabrice Bellard开发的,这位大牛还开发过 Qemu, FFMpeg (没有FFMpeg, 就没有抄它的腾讯视频,暴风影音...)

一、下载TCC

主页: http://bellard.org/tcc/

下载页: http://download.savannah.gnu.org/releases/tinycc/

TCC最新版本是0.9.26

下载执行程序: tcc-0.9.26-win32-bin.zip

无需安装的,只需要解压即可。

解压缩到 c:tcc , 可见目录下有 tcc.exe, 这个是编译器命令行程序,没有IDE界面的

将 c:tcc 加入到 系统路径中 (PATH)后,则可以在任何命令行窗口中使用了。

二、使用TCC

用notepad写一个测试用的c程序,如下,存盘为 hello.c

#include

main() {

printf("hello,worldn");

}

用tcc编译,命令如下:

tcc hello.c

则将生成 hello.exe , 运行hello.exe看看

TCC可以不编译C程序,而是把它直接运行,就像脚本解释语言那样。命令行如下:

tcc -run hello.c

效果:hello.c不需编译,直接运行了

这个将C程序直接运行的功能,是TCC独有的,其它C编译器都不行。

三、更多例程

tccexamples 目录下有几个例程

 fib.c 是一个标准C语言例程,不多说 , 编译它:tcc fib.c

hello_win.c 是一个Windows GUI例程, 编译它:tcc hello_win.c

 dll.c 是一个dll 例程,编译它:

  tcc -shared dll.c //生成dll.dll文件

tiny_impdef dll.dll  // 生成dll.def文件

tcc hello_dll.c dll.def //hello_dll.c 是调用 dll.dll 的例程

四,用TCC编译TCC

书上一直是这样说的: C语言是自己编译自己的, 就是说C语言的编译器是用C语言写的,把编译器的源代码编译一下,就成了C语言编译器

 做一下这个实验: 用TCC编译TCC源码

 

 首先下载TCC的源码,下载页: http://download.savannah.gnu.org/releases/tinycc, 下载源码:tcc-0.9.26.tar.bz2

解压缩到 c:tcc-0.9.26

其中的文件主要有:

    tcc.c 主程序

libtcc.c c语言标准库

 写一个BAT批处理文件,用于处理编译过程,存盘到c:tcc-0.9.26build.bat, 文件内容如下:

运行 build.bat, 结果如下

OK, 生成 tc.exe, 这个就是新的C语言编译器了

我让编译后生成的文件名是 tc.exe 而不是tcc.exe, 这样是为了方便与原始的编译器tcc.exe区分开

试用一下新的编译器tc.exe, 编译一下之前的 hello.c

 tc hello.c

显示有错误:

hello.c:1: error: include file 'stdio.h' not found

为什么 stdio.h 没找到呢? 因为当前目录下的includes目录中没有stdio.h

新建一个目录 mkdir c:newtcc

把相关文件复制进去

copy c:tcc-0.9.26*.exe c:newtcc

copy c:tcc-0.9.26libtcc.dll c:newtcc

xcopy /E c:tccinclude c:newtccinclude

xcopy /E c:tcclibtcc c:newtcclibtcc

xcopy /E c:tcclib c:newtcclib

再用新目录下的 tc.exe 作为编译器

c:newtcctc.exe hello.c

编译正确,生成 hello.exe

运行hello.exe, 则出现

hello, world

最后,如果你想学C/C++可以私信小编“01”获取素材资料以及开发工具和听课权限哦!

本文出处: https://www.toutiao.com/a6760243200528499214/
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部