2 hchchc6016 hchchc6016 于 2016.03.06 23:49 提问

源程序是不是多个源文件组成的obj?

源程序是什么?这段话说函数的本质是全局的,那么多个源文件不是就可以通用了吗,为什么还分为能否被调用

7个回答

w1eix1iao
w1eix1iao   2016.03.26 16:19
已采纳

源程序就是整一个程序。指的是代码文件,具体来说就是.cpp和.h文件。这些文件之间的关系可以很简单(比如其中一个文件包含了其他文件),他们的关系也可以很复杂(自己想象),怎么来描述文件之间的关系呢?有个东西叫做Makefile,用于描述这种关系,如果是使用VS等集成开发环境,那么编译器自动帮你做了这个工作。
编译器首先会将每个文件生成.obj 文件(在linux下,叫做.o文件)。接着根据Makefile文件,将这些文件联系起来。
这样做的好处是,如果你修改了其中一个文件,那么只要再生成一份.obj文件,其他.obj都不用修改,再根据Makefile,就能生成新的可执行文件。
PS:不用纠结Makefile文件怎么生成的,如果有兴趣的话可以学习。高手都是自己写的。。

caozhy
caozhy   Ds   Rxr 2016.03.07 00:04

源程序是.cpp .h文件,每个cpp编译得到obj
obj以及资源文件等用链接器链接得到exe dll
函数是全局的,但是编译器编译源代码要先得到声明,extern,然后才能编译,链接器再链接在一起。

WinsenJiansbomber
WinsenJiansbomber   2016.03.07 01:17

看你问题的描述,感觉要讲的东西挺多的。这样讲叫吧,源程序就是给人看的,OBJ是机器用的指令,但是还没有组织好,经过链接程序处理后就成了组织好的程序 exe 文件。

zuishikonghuan
zuishikonghuan   2016.03.07 07:57

不是,源程序是.c .cpp .h .hpp等,obj是源文件经过编译器编译后生成的“目标文件”,这时候源代码已经编译成二进制机器码了,把众多的obj和需要的lib库文件一起连接得到最终的结果,比如exe,dll,sys等。

oyljerry
oyljerry   Ds   Rxr 2016.03.07 10:21

源代码文件是c,cpp,h等文件,它们是你的程序语言写的文件,然后编译器会对这些文件进行编译,生成obj,o等目标文件,也就是中间文件,他们一般对应你的cpp,也就是每个cpp一般会生成一个obj,o等文件
然后编译器的链接器会做下一步动作,对这些obj,o文件进行处理,主要是地址重定位,库加载,然后生成最终的可执行文件,填充好各个字段的内容,代码段,数据段,栈,堆空间等。

hchchc6016
hchchc6016 下图的源程序是什么意思?
接近 2 年之前 回复
hchchc6016
hchchc6016 那源程序是什么呢?
接近 2 年之前 回复
hchchc6016
hchchc6016   2016.03.07 10:55

图片说明

lx624909677
lx624909677   Ds   Rxr 2016.03.07 16:07

一个源程序由多个源文件组成,那么在运行的时候,源文件和源程序是在同一个进程地址空间,调用源文件的函数肯定没问题,一个DLL他们里面有一个函数,想要使用的话,需要先吧这个DLL加载到内存中,这个是偶其他的应用程序就可以调用这个DLL中的函数,这种情况下,DLL中的函数是外部还是内部的?你的那个图片中的说法感觉不是很准确

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!