深入懂得C语言-09 编译器介绍

深入理解C语言-09 编译器介绍

比较小型的编译器是TinyCC(http://bellard.org/tcc/)


linux下编译非常方便。但gdb使用起来没有Visual Studio方便,特意花了一点时间,整理了一个VC工程。


TinyCC里面和i386/PE相关的主要是以下文件:

config.h 配置
elf.h  ELF格式相关,由于代码写得不是太好,PE也要用,不能删除
i386-asm.c i386相关汇编生成
i386-asm.h
i386-gen.c i386相关汇编生成
i386-tok.h i386相关汇编生成
include  外部头文件
libtcc.c   主要实现函数库
libtcc.h  
stab.def  gcc相关
stab.h   gcc相关

tcc.c   main函数,没啥东西
tcc.h  
tccasm.c   
tccelf.c  ELF相关,PE也用,不能删
tccgen.c 中间代码生成
tccpe.c PE格式生成
tccpp.c  主要词法语法分析代码,重点学习对象
tccrun.c 动态执行相关
tcctok.h  关键字,看这个文件就能很清楚明白gcc有哪些扩展关键字


为了编译通过,config.h下需要加以下宏定义:

#define TCC_VERSION ""
#define TCC_TARGET_I386
#define TCC_TARGET_PE


编译好后,一个简单的C语言编译器就生成出来了。


不过,编译后的Tcc还无法运行,主要缺乏运行C库。

运行库的代码位置:win32\lib

编译后,发现还是无法连接成功,大致调查了一下,可能是gcc与vc的兼容性问题。

TinyCC主要是在gcc环境下使用的,并不支持lib。

改用dll编译后,又提示外部main函数无法找到。

考虑到自己VC环境配置能力和白痴没多少区别,只能暂时放弃。

哪位做个VC下移植的,方便的下给点建议。

由于时间精力关系,目前只能花1-2个小时尝试下,等以后有时间再深入研究。