
程序编译过程一般为:
C源程序头文件-->预编译处理(cpp)-->编译程序本身-->优化程序-->汇编程序-->链接程序-->可执行文件
文件包含,一般是头文件,所引用的头文件里定义了你需要的函数、类型或者变量的定义,形式为#include< 头文件>;
文件的连接,应该是程序在生成可执行文件时所需要的一些引用,一般分为静态和动态链接两种。
解答:
比如有三个文件,ah , ac ,bc
然后你想通过在bc中include "ah",来调用ah中声明的函数,ah中声明的函数在ac中定义。
那么你就必须在编译,连接时把ac和bc连接在一起才行。
程序代码分为编译和链接阶段,编译主要是对程序进行语法检查,链接主要是生成执行文件:
1、文件包含就是#include ,主要用于引用编译器或者自己定义好的一些函数、宏、类等,一般在包含的头文件中有这些函数、宏、类等的定义,编程者知道每个定义的作用的话可以直接在自己程序中使用,使用前包含定义的头文件就可以;
2、连接是将多个编译后的中间代码一起连接成一个执行文件,因此包含的头文件中的定义必须全部找到中间代码对应的执行代码,对于编译器自带头文件中的标示定义,必须连接编译器的库文件。
(注:link一般翻译成“链接”,join等可以翻译成“连接”。)
库文件是已经被编译的目标代码文件,通过链接过程进行代码的定位以执行这些代码。链接可以分为静态链接和动态链接,前者是在编译期完全确定所需要的执行的代码集合,通过程序中编译并链接(链接器链接lib、a等静态库文件和obj、o等其它目标文件)的目标代码指令定位调用代码,比较直接,时间效率通常较高,但生成的可执行文件可能会很大,且非常不方便在运行期共享目标代码;后者是程序在运行期载入动态库文件(例如dll、so)然后定位需要的代码,优点是共享目标代码方便,可执行文件体积可以很小,缺点是技术较复杂,平台相关性大导致跨平台性差,移植可能比较困难,此外动态库文件的依赖性和版本管理可能会非常麻烦(比如“dll地狱”)。
对于库文件,可以通过编译程序中的归档程序(生成静态库文件;例如libexe、ar)和动态库生成程序(可能是编译器和链接器)生成,当然实现的编译还是要通过编译器(例如clexe、gcc)。高级的用法可以使用make工具(例如VC++的NMake,GCC配套的GNU make等)来管理的这些源文件和目标文件的依赖性。一般IDE中建立专门类型的工程可以简化或者不使用命令行 *** 作,在全编译时同时产生可执行文件和库文件(也可以不产生可执行文件)。
====
[原创回答团]
要保证这两个obj中有且只有一个main函数,然后用link命令来进行连接。
link
/OUT:输出文件exe
[参数]
Aobj
Bobj
比如需要用1obj和2obj生成aexe,aexe是一个控制台程序,那么就是
link
/OUT:aexe
/SUBSYSTEM:CONSOLE
1obj
2obj
如果aexe是一个Windows窗体程序,那么就是
link
/OUT:aexe
/SUBSYSTEM:WINDOWS
1obj
2obj
注:Link是Visual
Studio中VC的连接器,如果你安装过VC,那么link就在你的VC目录的Bin目录下。
以上就是关于C语言,试述“文件包含”和程序文件的连接的概念,二者有何不同全部的内容,包括:C语言,试述“文件包含”和程序文件的连接的概念,二者有何不同、C语言中"程序文件的连接"与"文件包含"有什么区别和联系、C语言里 “文件包含”和程序文件连接(link)的区别。 (平时的#include "stdio.h" 这个算哪类)谢谢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)