admin 管理员组文章数量: 1086019
2024年3月13日发(作者:jupyter notebook快捷键一览)
TCC研究(1) Tiny C Compiler最小的C语言编译器,自己编译自己
原创
2015年03月22日 02:16:55
最近,在学习编译器技术, 研究了一下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
主页: /tcc/
下载页: /releases/tinycc/TCC最新版本是
0.9.26
下载执行程序: 无需安装的,只需要解压即可。
解压缩到 c:tcc , 可见目录下有 , 这个是编译器命令行程序,没有IDE界面
的
将 c:tcc 加入到 系统路径中 (PATH)后,则可以在任何命令行窗口中使用了。二、
使用TCC
用notepad写一个测试用的c程序,如下,存盘为 hello.c
[html] view plain copy #include <stdio.h> main()
{ printf("hello,worldn"); }
用tcc编译,命令如下:
tcc hello.c
则将生成 , 运行看看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 //生成文件
tiny_impdef // 生成文件
tcc hello_dll.c //hello_dll.c 是调用 的例程四,用TCC编译TCC
书上一直是这样说的: C语言是自己编译自己的, 就是说C语言的编译器是用C
语言写的,把编译器的源代码编译一下,就成了C语言编译器
做一下这个实验: 用TCC编译TCC源码
首先下载TCC的源码,下载页:
/releases/tinycc, 下载源码:2
解压缩到 c:tcc-0.9.26
其中的文件主要有:
tcc.c 主程序
libtcc.c c语言标准库 写一个BAT批处理文件,用于处理编译过程,
存盘到c:, 文件内容如下:
[plain] view plain copy @echo ====用TCC编译TCC==== @set /p
VERSION= < VERSION @echo>config.h #define TCC_VERSION
"%VERSION%" @echo 设置tcc为c语言编译器 @set CC=tcc @set
target=-DTCC_TARGET_PE -DTCC_TARGET_I386 @echo 编译工具软件:
tiny_, tiny_ @%CC% %target% win32/tools/tiny_impdef.c
-o tiny_ @%CC% %target% win32/tools/tiny_libmaker.c -o
tiny_ @echo 编译 @if not exist libtccnul mkdir libtcc
@%CC% %target% -w -shared -DLIBTCC_AS_DLL -DONE_SOURCE libtcc.c -o
-w @tiny_impdef -o libtcc/ @echo 编译
@%CC% %target% tcc.c -o -ltcc -Llibtcc @echo 编译结束, 生成文件:
运行 , 结果如下
[plain] view plain copy C:tcc-0.9.26>build ====用TCC编译TCC====
设置tcc为c语言编译器 编译工具软件:tiny_, tiny_ 编译
编译 tcc.c:81: warning: assignment from incompatible pointer
type 编译结束, 生成文件: OK, 生成 , 这个就是新的C语言编译器了我
让编译后生成的文件名是 而不是, 这样是为了方便与原始的编译器
区分开试用一下新的编译器, 编译一下之前的 hello.c
tc hello.c
显示有错误:
[plain] view plain copy 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: c:newtcc
xcopy /E c:tccinclude c:newtccinclude
xcopy /E c:tcclibtcc c:newtcclibtcc
xcopy /E c:tcclib c:newtcclib再用新目录下的 作为编译器
c: hello.c
编译正确,生成
运行, 则出现hello, worldOK, 正确了
版权声明:本文标题:tcc研究tinyccompiler最小的c语言编译器自己编译自己 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1710317175a567632.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论