c语言自己编译自己,TCC研究(一): Tiny C Compiler最小的C语言编译器,自己编译自己...
TCC研究(1): Tiny C Compiler最小的C语言编译器,自己编译自己
最近,在学习编译器技术, 研究了一下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,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的源码,下载页: 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.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研究(一): Tiny C Compiler最小的C语言编译器,自己编译自己...相关推荐
- c语言编译器tcc 源码,TCC研究(1): Tiny C Compiler最小的C语言编译器,自己编译自己...
Tiny C Compiler(简称TCC, 或Tiny CC)是世界上最小的C语言编译器.第一课: 安装,试用, 用TCC编译自己 最近,在学习编译器技术, 研究了一下TCC, 记录一下. Tiny ...
- Tiny C Compiler最小的C语言编译器
TCC研究(1): Tiny C Compiler最小的C语言编译器,自己编译自己,tcccompiler 最近,在学习编译器技术, 研究了一下TCC, 记录一下. Tiny C Compiler(简 ...
- c语言程序设计 长春大学,“C语言程序设计”双语教学改革研究.pdf
· 150 · 价值工程 语言程序设计''双语教学改革研究 ResearchonBilingualEducationofC ProgrammingLanguage 郭来德①GuoLaide:窦玲②Do ...
- PL/0语言编译器扩展 编译原理课程实践(1)
转眼大学生活就要结束,编译原理课程学的东西很多都忘记了.当时我们编译原理课程实践是PL/0语言编译器扩展,在原有PL/0语言文法进行扩展.我写这次博文一是为了回忆以前学的知识,加深记忆:二是和大家分享 ...
- 【CIPS 2016】(4-5章)语言认知模型、语言表示以及深度学习(研究进展、现状趋势)
CIPS 2016 笔记整理 <中文信息处理发展报告(2016)>是中国中文信息学会召集专家对本领域学科方 向和前沿技术的一次梳理,官方定位是深度科普,旨在向政府.企业.媒体等对中文 信息 ...
- matlab里面的sul,MATLAB语言在电机控制系统仿真研究中的应用
MATLAB语言在电机控制系统仿真研究中的应用 宋凌锋李立毅程树康 [摘要]简要介绍了MATLAB语言,并把MATLAB语言应用于电机控制系统的仿真研究中,同时以一个具体实例较为深入地对其进行了说明. ...
- 大模型“研究源”告急:2026年高质量语言数据或将耗尽
Datawhale干货 作者:李梅 编辑:陈彩娴 来源:AI科技评论 审校:黄元帅 前 言 语言模型的缩放定律(Scaling law)表明,其规模大小取决于可用数据的数量,所以在过去几年,大约有一 ...
- (附源码)python《C语言程序设计》课程案例库研究 毕业设计 030946
Python<C语言程序设计>课程案例库研究系统 摘 要 <C语言程序设计>课程案例库研究系统系统主要功能模块包括学生用户管理.管题库信息管理.题库练习等,采取面对对象的开发模 ...
- Go 语言又称 Golang,是谷歌(Google)开发的一种静态强类型、编译型、并发型的编程语言。2009 年 11 月 10 日,Go 语言以开源方式向全球发布,如今许多大公司纷纷选择使用 Go
Go 语言又称 Golang,是谷歌(Google)开发的一种静态强类型.编译型.并发型的编程语言.2009 年 11 月 10 日,Go 语言以开源方式向全球发布,如今许多大公司纷纷选择使用 Go ...
最新文章
- SVD(奇异值分解)小结
- 各种SmartPhone上的跨平台开源框架的总结
- mongo connections url string 的问题
- windows下redis安装,注册成系统服务
- simulink 快捷键 运行_【泡泡读者来搞】ROS、Simulink、Carsim的互联与规划、控制算法的验证...
- 个人博客网站的设计与实现_基于BIS的网站建设的设计与实现
- WordPress——SMTP Error: Could not authenticate.
- asterisk queue 队列
- 也谈UpdatePanel与UrlRewrite一起work时出现Form Action属性的问题
- configure: error: gperf is needed
- select中常用的对象
- 递归算法的基本理解以及基本算法,多行注释详解,适合编程小白,刚接触递归的编程新手
- 如何免费CAJ完整转换成Word
- C#上位机工作感想2(2020.4.15-2021.7.24)
- ug初始化错误未能创建服务器,UG10.0提示初始化错误-15的处理操作方法
- java根据年份计算生肖
- cad化工设备绘图_化工CAD制图基础篇,管道布置图学起来
- 23、python对数据进行求和、方差、平均值等基本统计指标计算
- word批注怎么删除计算机名字,Word批注怎样删掉用户名
- deepin入坑前必读(懊悔篇)
热门文章
- ES6学习笔记03:变量的解构赋值
- 一般编译器错误_[翻译]MLIR:摩尔定律终结的编译器基础结构
- requestmapping注解访问404_开发人员都必须知道的Spring注解概览
- 【Java基础学习笔记】- Day11 - 第四章 引用类型用法总结
- mybatis手动切换数据库_在Spring项目中使用 Mybatis 如何实现动态切换数据源
- Algorithms Part 1-Question 2-QuickSort-快速排序算法
- linux 运行程序的方法,linux 长期运行程序的 四种方法
- cleanmymac3.9.6_Spring Boot中文参考指南(2.1.6) 46.3.6、使用 JMX
- Vulkan in 30 minutes
- UE4 Roadmap