c++ 编译 链接是怎么回事?
编译和link(链接)是怎么一回事啊?我现在能理解到的是,编译是把源程序翻译成了机器能看懂的机器码,link是把所用到的头文件都集合起来了,我理解的对吗?希望能给我详细讲...
编译和 link(链接)是怎么一回事啊?我现在能理解到的是,编译是把源程序翻译成了机器能看懂的机器码,link是把所用到的头文件都集合起来了, 我理解的对吗?希望能给我详细讲讲,不要大段大段copy。。。。 谢谢~~
ps:
.h .cpp文件编译能出来 .o文件,.o文件再进行链接出来.so文件? 编译还能感觉可以理解,link就比较理解起来吃力。。。。
听1楼这么回答 我更迷糊了,到底link是怎么回事啊?能详细给我讲讲吗? 展开
ps:
.h .cpp文件编译能出来 .o文件,.o文件再进行链接出来.so文件? 编译还能感觉可以理解,link就比较理解起来吃力。。。。
听1楼这么回答 我更迷糊了,到底link是怎么回事啊?能详细给我讲讲吗? 展开
5个回答
展开全部
compile和link是大多数语言从原代码生成可执行程序的两个步骤。
之所有有这两个步骤因为几乎任何一个程序都不是用一个原文件写出来的。compile是先针对单独原文件进行处理。link是把compile处理的结果组合成一个完整的可执行文件。
其实C/C++完全也可以一步成型,不需要compile和link两个步骤,但是那样的后果就是:一,每次生成可执行程序,必须翻译全部源代码;二,C语言的执行库(printf, scanf这些)必须都以源代码形式存在。这怎么样也说不过去吧。
另外头文件不属于compile和link过程,头文件是预编译过程的文件。
C/C++语言的完整编译过程是
一、预编译
处理#define #if #include这类#开头的语句,这些称为预编译指令。这个过程中会把.h文件和.c/.cpp文件组合成最终交给compile过程的原文件。这个原文件是不包含任何#开头的语句的。所有#define定义的宏也会被替换。
二、编译
把上面那个原文件编译成.o或者VC里是.obj文件。这个文件保存了机器码化的函数、函数的描述、全局变量的描述、乃至段的描述等等。
三、连接
把可执行程序需要的所有的编译过程产生的.o或者.obj文件组合到一起。(这里也包括.lib文件,.lib文件件本质上就是打包的.obj文件集合)。另外连接过程还会组合一些其他数据,比如资源、可执行文件头等等。
之所有有这两个步骤因为几乎任何一个程序都不是用一个原文件写出来的。compile是先针对单独原文件进行处理。link是把compile处理的结果组合成一个完整的可执行文件。
其实C/C++完全也可以一步成型,不需要compile和link两个步骤,但是那样的后果就是:一,每次生成可执行程序,必须翻译全部源代码;二,C语言的执行库(printf, scanf这些)必须都以源代码形式存在。这怎么样也说不过去吧。
另外头文件不属于compile和link过程,头文件是预编译过程的文件。
C/C++语言的完整编译过程是
一、预编译
处理#define #if #include这类#开头的语句,这些称为预编译指令。这个过程中会把.h文件和.c/.cpp文件组合成最终交给compile过程的原文件。这个原文件是不包含任何#开头的语句的。所有#define定义的宏也会被替换。
二、编译
把上面那个原文件编译成.o或者VC里是.obj文件。这个文件保存了机器码化的函数、函数的描述、全局变量的描述、乃至段的描述等等。
三、连接
把可执行程序需要的所有的编译过程产生的.o或者.obj文件组合到一起。(这里也包括.lib文件,.lib文件件本质上就是打包的.obj文件集合)。另外连接过程还会组合一些其他数据,比如资源、可执行文件头等等。
展开全部
不对
link是将编译的结果连接成可执行代码
主要是确定各部分的地址,将编译结果中的地址符号全换成实地址!
link是将编译的结果连接成可执行代码
主要是确定各部分的地址,将编译结果中的地址符号全换成实地址!
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼主,程序的本质,就是在内存中通过操作数据来进行运算,那么,程序怎么知道我数据的位置呢?程序唯一能知道数据在内存中位置的方法,就是将程序中的要操作的地址变量比如char *a去和真正在内存中的一个sizeof(char)大小的地址找对应上!!!编译,如你所说,是将文件编译成可执行的程序文件,链接的过程,就是将你的数据在内存中的地址,全部一一对应到程序代码中的指代的地址中去,就想一个车间,原料运输到作业流水线上的过程!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
.dsw是工作区文件
.dsp是工程文件
你点击工作区打开编译,
如果没有.dsw文件,就打开dsp文件进行编译
.dsp是工程文件
你点击工作区打开编译,
如果没有.dsw文件,就打开dsp文件进行编译
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这是iostream.h 头文件,哪里是链接出的问题呢?
你是不是用这个东西不正确引起的,应该把你编译链接错误贴出来人家才知道怎么回事的.
你是不是用这个东西不正确引起的,应该把你编译链接错误贴出来人家才知道怎么回事的.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询