您的位置:首页 > 编程语言 > C语言/C++

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

2014-03-23 12:32 211 查看
比较小型的编译器是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个小时尝试下,等以后有时间再深入研究。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  TinyCC