Tiny C Compiler(简称TCC, 或Tiny CC)是世界上最小的C语言编译器.第一课: 安装,试用, 用TCC编译自己

最近,在学习编译器技术, 研究了一下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最新版本是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,world\n");

}

用tcc编译,命令如下:

tcc hello.c

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

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

tcc  -run hello.c

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

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

三、更多例程

tcc\examples 目录下有几个例程

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的源码,下载页: , 下载源码:tcc-0.9.26.tar.bz2

解压缩到  c:\tcc-0.9.26

其中的文件主要有:

tcc.c  主程序

libtcc.c  c语言标准库

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

@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_impdef.exe, tiny_libmaker.exe

@%CC% %target% win32/tools/tiny_impdef.c -o tiny_impdef.exe

@%CC% %target% win32/tools/tiny_libmaker.c -o tiny_libmaker.exe

@echo 编译libtcc.dll

@if not exist libtcc\nul mkdir libtcc

@%CC% %target% -w -shared -DLIBTCC_AS_DLL -DONE_SOURCE libtcc.c -o libtcc.dll -w

@tiny_impdef libtcc.dll -o libtcc/libtcc.def

@echo 编译tc.exe

@%CC% %target% tcc.c -o tc.exe -ltcc -Llibtcc

@echo 编译结束, 生成文件:  tc.exe

运行 build.bat, 结果如下

C:\tcc-0.9.26>build

====用TCC编译TCC====

设置tcc为c语言编译器

编译工具软件:tiny_impdef.exe, tiny_libmaker.exe

编译libtcc.dll

编译tc.exe

tcc.c:81: warning: assignment from incompatible pointer type

编译结束, 生成文件: tc.exe

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.26\libtcc.dll c:\newtcc

xcopy /E c:\tcc\include c:\newtcc\include\

xcopy /E c:\tcc\libtcc c:\newtcc\libtcc\

xcopy /E c:\tcc\lib c:\newtcc\lib\

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

c:\newtcc\tc.exe  hello.c

编译正确,生成 hello.exe

运行hello.exe, 则出现

hello, world

OK, 正确了

c语言编译器tcc 源码,TCC研究(1): Tiny C Compiler最小的C语言编译器,自己编译自己...相关推荐

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

    TCC研究(1): Tiny C Compiler最小的C语言编译器,自己编译自己 最近,在学习编译器技术, 研究了一下TCC, 记录一下. Tiny C Compiler(简称TCC, 或Tiny ...

  2. Tiny C Compiler最小的C语言编译器

    TCC研究(1): Tiny C Compiler最小的C语言编译器,自己编译自己,tcccompiler 最近,在学习编译器技术, 研究了一下TCC, 记录一下. Tiny C Compiler(简 ...

  3. 源码分析教程5部曲之1——漫游C语言-杨振平-专题视频课程

    源码分析教程5部曲之1--漫游C语言-5052人已学习 课程介绍         源码分析教程5部曲之1--漫游C语言 课程收益     源码分析教程5部曲之1--漫游C语言 讲师介绍     杨振平 ...

  4. 淘宝数据库OceanBase SQL编译器部分 源码阅读--生成物理查询计划

    淘宝数据库OceanBase SQL编译器部分 源码阅读--生成物理查询计划 SQL编译解析三部曲分为:构建语法树,制定逻辑计划,生成物理执行计划.前两个步骤请参见我的博客<<淘宝数据库O ...

  5. Redhat linux 安装 gcc编译器,Gcc源码包,rpm包安装方法!

    点评:分两种情况: 先看这篇转过来的文章,俺老孙懒得写了. Linux软件安装通用思路 在Linux系统中,软件安装程序比较纷繁复杂,不过最常见的有两种: 1)一种是软件的源代码,您需要自己动手编译它 ...

  6. Linux内核源码分析--内核启动之(3)Image内核启动(C语言部分)(Linux-3.0 ARMv7) 【转】...

    原文地址:Linux内核源码分析--内核启动之(3)Image内核启动(C语言部分)(Linux-3.0 ARMv7) 作者:tekkamanninja 转自:http://blog.chinauni ...

  7. Ubuntu 14.04 64bit上curl-7.37源码包中的sample 源码示例研究

    curl是Linux平台上(本人不考虑其他平台)很好用的一个工具软件,它有命令行,有C接口API,更常见的编程用途是php和python版本.如果在C/C++平台上使用curl,可以直接去官网 htt ...

  8. c调用易语言串口,易语言串口API源码

    易语言串口API源码系统结构:ReadCommPure,BuildCommDCB,CreateFilea,关闭句柄a,SetCommState,ReadFileA,GetCommState,Write ...

  9. 字符串固定长度 易语言_易语言字符串操作源码

    易语言字符串操作源码 系统结构:字符串_取长度,字符串_取中间,字符串_取左边,字符串_取右边,字符串_替换,到宽字符,到多字节,取文本数据地址,取字节集数据地址,MultiByteToWideCha ...

最新文章

  1. Linux环境编程--进程
  2. java获取ajax上传的文件,Java使用Ajax异步上传文件
  3. c语言uint赋值给int,如何在C#中将uint转换为int?
  4. Swift云存储特性研究
  5. c语言 输入若干字符串 用指针和一位数组 冒泡排序,C 语言作业 - 1 - 指针使用与冒泡排序...
  6. Android之JNI ERROR (app bug): accessed stale global reference 0xb39533f2 (index 19708 in a table of s
  7. BZOJ 2243 染色(树链剖分好题)
  8. 基于深度卷积神经网络的目标检测研究综述
  9. python自动填日志_Selenium3+python自动化012+日志logging基本用法、高级用法
  10. python机器学习库xgboost使用调参
  11. throw new exception 后程序未中断_Java异常Exception-checked、unchecked
  12. 论文查重时的近义词同义词替换清单?
  13. MOS管参数每一个参数详解-收藏版
  14. 学习笔记15-L298N
  15. 云呐:机房资产管理系统web版,设备资产信息管理的应用
  16. 关于字符串中加入变量的方式
  17. linux计划任务之crontab
  18. 在PC体验sailfishos(旗鱼)系统
  19. 组装网游服务器,网游服务器的搭建
  20. opengl读取24位BMP文件为纹理并处理黑色背景为透明

热门文章

  1. 未能实例化2个ActiveX控件,请重新安装或注册这些控件并重试
  2. 嵌入物理(PINN)还是基于物理(AD)?
  3. Device Tree(六)Kernel 启动之 FIT-uImage
  4. vue-cli创建脚手架工程
  5. WCH沁恒单片机在线调试支持列表
  6. 计算机操作系统感悟随笔--虚拟存储管理
  7. Android CTS测试(2.2 2.3 4.0 4.1)
  8. 最新增值业务内容点评:移动增值服务
  9. 设置div滚动条样式
  10. 从中国平安收购深发展说起