C语言最简开发环境(续一)

来源:互联网 发布:2016网络神曲排行榜 编辑:程序博客网 时间:2024/04/27 05:17

一、引言
续上篇文章《C语言最简开发环境》,里面主要简单讲了最简环境主要的探究过程,以及探究留下的好多疑问。这章我们继续上一章《C语言最简开发环境》的问题,继续探究学习。

二、编译、链接过程

续上次的探究,在minc文件夹中依照先后顺序加入的文件有:TCC.EXE、a.c、C0S.OBJ、EMU.LIB、MATHS.LIB、CS.LIB文件。那么这些文件是不是都需要呢?如果需要,那么中应该知道为什么用吧。为了详细的深入了解其中的原来,尽可能排除干扰,将minc文件夹中的其他几个文件去掉,只留下TCC.EXE和源文件a.c,minc文件夹如下图示:


并且将a.c源文件简化如下:

然后用命令>tcc a.c 进行编译,依然会报错提示需要:tlink.exe文件,但是除此之外,我们还发现了minc文件夹中生成了两个文件:a.obj和TURBOC.$LN文件,如下图示:


如果心细,不难发现TURBOC.$LN文件中有一些线索,打开TURBOC.$LN文件,我们看到如下内容:


在根据报错的信息:如下图示:

大概猜到:TCC.EXE对a.c的编译过程包括连接,需要tlink.exe连接器把c0s.obj、EMU.LIB、MATHS.LIB、CS.LIB连接起来。也就是说命令tcc a.c的执行包括了编译、连接、生成可执行文件的过程。从TURBOC.$LN文件文件中的内容可以看出,此过程是有一定的先后顺序的。那么是谁先谁后呢?是先有了a.obj还是TURBOC.$LN文件?

TURBOC.$LN 文件名有什么含义?查一下才知道,如下:


文件名仅仅是公司名称而已,其中没有我们利用的信息。所以只能从文件内容入手。

我的猜想是:a.obj的生成不依赖EMU.LIB、MATHS.LIB、CS.LIB包括TURBOC.$LN文件,且TURBOC.$LN文件只是一个中间过程文件而已,编译连接完毕就删除掉了。

那么TURBOC.$LN是有用的吗?还是只是起到提示说明而已呢?如果是提示,那么其中的内容的真实意思是啥?不难读懂:

c0s.obj+
a
a
/c/x
EMU.LIB+
maths.lib+
cs.lib

其中连起来看:c0s.obj + a a /c/x EMU.LIB+ maths.lib+ cs.lib 是不是命令?

如果是命令,那么我们可以不用c0s.obj、EMU.LIB、 maths.lib、cs.lib这四个文件吗?

上篇《C语言最简开发环境》留下的一个问题,printf函数从哪里来,到这里好像还不能解释printf从哪里来,虽然在a.c源文件里已经去掉了printf函数,但是这几个文件还是需要吗?






0 0
原创粉丝点击