当前位置:首页 » 编程软件 » 编译时的连接

编译时的连接

发布时间: 2024-12-07 11:48:27

c语言里面的编译和链接是怎么回事啊

编译是把你输入的源代码生成目标代码(即:以.obj为后缀名的文件),连接是把.obj文件和系统库相连接(如:#include 中所声明的文件)。如果直接按run,如果源代码正确则是系统自动编译连接,要是源代码有错误则无法运行,并显示错误信息。

❷ 程序编译连接的过程中各干了什么事情

呵呵,楼主应该看看《编译原理》。

我的空间里的一篇日志或许对楼主也有帮助。

链接是把程序代码与所需要的其他目标代码,或函数库,Run-time 库连接在一起。

比如 printf,程序代码里没有它内部实现的代码,只是说要调用这个功能。
连接程序会把它内部实现代码从 Run-time 库里提出来,放在一起,这样程序才可以单独执行。

对于使用了第三方函数库的代码来说,链接程序同样会在第三方函数库中提取相关内容,加在一个可执行文件(Exe 或其他)中。

另外,一些比较大的程序,可能会分若干个文件,它们互相调用彼此的函数。可以独立编译成若干个目标代码。如果这些函数有的缺失了,编译也可以通过。
这样做的好处是,对于大型程序,分成若干部分分别编译,加快了编译过程。同时,减少每个源码文件的行数。
比如,写一个计算程序。后台计算有一个文件,可以编译成功。前台界面有一个文件,也可以编译成功。它们分辨编译成两个不同的目标代码文件(obj 或其他)

然后经过链接过程
这个例子的话,可以认为有这个式子:
前台.obj + 后台.obj + .... + 第三方函数库 + Run-time 库 = Exe

链接的时候,才会检查这种相互依赖是否完整。
比如前台部分是否使用了有些函数,而这些函数在后台处理模块中并不存在?或者忘记写这个函数了?
或者是否调用了一个后台函数,而这个函数的参数与调用的时候根本不一致?
发生这些情况时,才会给出链接警告和错误。

❸ 在使用VC时为什么编译时没有错误,连接时有错误,不能打开文件

我们通常所说的编译其实包含两个部分:编译和链接。
编译是指把程序源文件编译成目标文件,即vc下的.o文件。
链接是指把目标文件生成可执行文件。
链接的时候,如果某个函数只有声明,但没有实现,或者依赖第三方库,但只提供了头文件,没有提供库文件,或者库文件的版本不对,都会导致链接错误,而这些错误,在编译阶段通常是不会报错的。所以,你可以针对上面提到的几点一一排除一下:
1,程序中所用到的自己写的函数是否都已经实现;
2,如果使用了第三方库,确认是否已经有了第三方库,是否在工程设置中包含了库文件,并且配置了库文件搜索路径,保证编译器能找到所需要的库文件;
3,如果使用了第三方库,确认所使用的库文件版本是对的。
如果上面这些都做好,基本上就不会有问题了。

❹ c语言中的连接是什么意思

c语言中的连接指de是将obj文件生成为exe文件。

##可以作为连接字符串的连接符,##为宏扩展提供了一种连接实际变元的。如果替换文本中的参数用##相连,那么参数就被实际变元替换,##与前后的空白符被删除,并对替换后的结果重新扫描。

例如,下面定义的宏paste用于连接两个变元:

#definepaste(front,back)front##back

从而宏调用paste(name,1)的结果是建立单词name1。

(4)编译时的连接扩展阅读

C语言连接符的使用:

#include<stdio.h>

#defineOperations(x)operation_##x//##是黏贴字符串

intOperations(sum)(intx,inty){//operation_sum(intx,inty)

returnx+y;

}

intOperations(sub)(intx,inty){//operation_sub(intx,inty)

returnx-y;

}

intOperations(mul)(intx,inty){//operation_mul(intx,inty)

returnx*y;

}

floatOperations(div)(floatx,floaty){//operation_div(intx,inty)

floatresult;

result=x/y;

returnresult;

}

#definePrint(x)printf("%s,%d ",#x,x);//#表示将参数转变为字符串

intmain()

{

intx;

floaty;

x=Operations(sum)(10,20);

printf("x=%d ",x);

x=operation_sum(100,20);

printf("x=%d ",x);

x=Operations(sub)(10,20);//operation_sub(10,20)也可以

printf("x=%d ",x);

x=Operations(mul)(10,20);//operation_mul(10,20)也可以

printf("x=%d ",x);

y=Operations(div)(11,20);//operation_div(11,20)也可以

printf("y=%lf ",y);

Print(100);

return0;

}


❺ C语言编辑编译连接的作用是什么

C语言编辑的作用是检查语法,制作C语言的源文件和头文件,生成汇编代码。

C语言编辑的作用是将汇编代码转换机器码。在这一步中,会对文件内部的语法语义做处理,如果编译出错,无法进行后续动作。

C语言链接的作用是将机器码链接到一起生成可执行程序。这一步会对文件之间的关联做检查,如果出错,将不会生成可执行程序,也就无法执行。

(5)编译时的连接扩展阅读:

C语言链接时,将源文件中用到的库函数与汇编生成的目标文件.o合并生成可执行文件。该可执行文件会变大很多,一般是调用自己电脑上的静态库。

静态库和应用程序编译在一起,在任何情况下都能运行,而动态库是动态链接,文件生效时才会调用。很多代码编译通过,链接失败就极有可能在静态库和动态库这出现了纰漏,要视情况解决。缺少相关所需文件,就会链接报错。这个时候就要检查下本地的链接库是不是缺损。

❻ c++ 编译 链接是怎么回事

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文件集合)。另外连接过程还会组合一些其他数据,比如资源、可执行文件头等等。

热点内容
解压引导 发布:2025-01-02 01:23:25 浏览:654
微信小程序游戏如何设置密码 发布:2025-01-02 01:01:27 浏览:76
php跨域请求 发布:2025-01-02 01:01:24 浏览:785
5复式算法 发布:2025-01-02 01:00:00 浏览:545
androidtts 发布:2025-01-02 00:59:59 浏览:75
监控访问网址 发布:2025-01-02 00:57:15 浏览:333
堡垒机php 发布:2025-01-02 00:56:30 浏览:52
禁止网页脚本 发布:2025-01-02 00:56:30 浏览:809
java培训班入门 发布:2025-01-02 00:56:23 浏览:229
易语言封包拦截源码 发布:2025-01-02 00:50:44 浏览:881