问题描述
- 源程序是不是多个源文件组成的obj?
-
源程序是什么?这段话说函数的本质是全局的,那么多个源文件不是就可以通用了吗,为什么还分为能否被调用
解决方案
源程序就是整一个程序。指的是代码文件,具体来说就是.cpp和.h文件。这些文件之间的关系可以很简单(比如其中一个文件包含了其他文件),他们的关系也可以很复杂(自己想象),怎么来描述文件之间的关系呢?有个东西叫做Makefile,用于描述这种关系,如果是使用VS等集成开发环境,那么编译器自动帮你做了这个工作。
编译器首先会将每个文件生成.obj 文件(在linux下,叫做.o文件)。接着根据Makefile文件,将这些文件联系起来。
这样做的好处是,如果你修改了其中一个文件,那么只要再生成一份.obj文件,其他.obj都不用修改,再根据Makefile,就能生成新的可执行文件。
PS:不用纠结Makefile文件怎么生成的,如果有兴趣的话可以学习。高手都是自己写的。。
解决方案二:
源程序是.cpp .h文件,每个cpp编译得到obj
obj以及资源文件等用链接器链接得到exe dll
函数是全局的,但是编译器编译源代码要先得到声明,extern,然后才能编译,链接器再链接在一起。
解决方案三:
看你问题的描述,感觉要讲的东西挺多的。这样讲叫吧,源程序就是给人看的,OBJ是机器用的指令,但是还没有组织好,经过链接程序处理后就成了组织好的程序 exe 文件。
解决方案四:
不是,源程序是.c .cpp .h .hpp等,obj是源文件经过编译器编译后生成的“目标文件”,这时候源代码已经编译成二进制机器码了,把众多的obj和需要的lib库文件一起连接得到最终的结果,比如exe,dll,sys等。
解决方案五:
源代码文件是c,cpp,h等文件,它们是你的程序语言写的文件,然后编译器会对这些文件进行编译,生成obj,o等目标文件,也就是中间文件,他们一般对应你的cpp,也就是每个cpp一般会生成一个obj,o等文件
然后编译器的链接器会做下一步动作,对这些obj,o文件进行处理,主要是地址重定位,库加载,然后生成最终的可执行文件,填充好各个字段的内容,代码段,数据段,栈,堆空间等。
解决方案七:
一个源程序由多个源文件组成,那么在运行的时候,源文件和源程序是在同一个进程地址空间,调用源文件的函数肯定没问题,一个DLL他们里面有一个函数,想要使用的话,需要先吧这个DLL加载到内存中,这个是偶其他的应用程序就可以调用这个DLL中的函数,这种情况下,DLL中的函数是外部还是内部的?你的那个图片中的说法感觉不是很准确