导航:首页 > 源码编译 > 编译时的链接是什么意思

编译时的链接是什么意思

发布时间:2022-04-23 22:38:52

㈠ 关于c语言中变量有外部链接内部链接和无 链接怎么理解

这部分内容是在程序的编译和link层面谈的。
一个大一些的工程往往不是只有一个程序文件,经常由好多C程序文件构成,有的时候里面个别程序可能还用的其他语言,编码完成后常常分别编译,编译完成再link到一起。某个C程序需要用到其他程序中定义过的变量,一般都加extern前缀,编译时编译器会预留访问链接的空位,等到link阶段再在整个工程的其他C编译结果中去对号,把访问链接填上。这就是外部链接。如果你程序全写在一个文件里,那永远都不会有外部链接。
内部链接常指一个程序文件中全局变量,可以被程序文件内各个子程序访问,这在编译过程中处理,和link阶段不发生关系。如果变量前加了static,那么它永远不会被外部程序访问,它不会被编译程序写入目标代码的链接区。
无链接,就是在一个单体程序里,比如一个子程序,定义一个变量只给这个程序段用,那就是无链接。编译器和link都不需要对这样的变量做跨程序段的地址链接,这样的变量都是直接分配寄存器或者近堆中的直接地址(每个子程序都有自己的基本存储空间,被调用时得到分配,返回时被释放,我习惯叫它近堆,标准叫啥早不记得了)。
变量是这样,程序代码段也大体差不多。每次在程序文件中调用一个文件内部的子程序,就产生一个内部链接;如果调用外部文件中的子程序,就产生一个外部链接。只有没有任何子程序,所有代码都写在一个文件里的程序,才是无链接程序。
链接是个编译和link层面的概念,所以不仅限于变量层面讨论。
对了,再延伸,可以把一些子程序文件归类,程序执行某部分任务才访问,其他时间不访问时,可以生成DLL。在程序执行那部分功能时,通过操作系统和DLL建立动态链接,当然这是外部链接,这也是程序设计中常用到的。这可以避免生成一个巨大的EXE,运行时吃掉过多的系统资源,还可以实现这个DLL中包含的子程序在操作系统级和其他程序共用。

㈡ 编译之后为什么要连接

这是一个编程基础的问题。
目前编程语言主要有两种类型,一种是编译型语言,一种是解释型语言。二者的区别在于:编译型语言需要编译、链接生成可执行文件之后才能运行,解释型语言直接就可以运行。C语言是一种编译型语言。

对于计算机来说,只能运行二进制的机器指令。为了方便编写指令给计算机,通过简单的替换之后有了汇编语言。但是汇编语言相对来说还是相当复杂,编写软件时工作量巨大。所以就有了如C语言,C++,JAVA之类的高级语言。

这些语言其实是对汇编做了抽象封装。编译这个动作就是将C语言翻译成了汇编。C语言经过编译这个动作后每个.C文件都会生成一个OBJ,链接这个动作是将多个OBJ链接到同一个可执行文件中,最后生成的是EXE文件。

㈢ 编写代码时,源代码必须经过编译和链接生成目标代码,请问什么是链接

链接是将编译生成的目标代码链接成可执行代码,链接时会将需要调用的库函数和目标文件一起链接成可执行代码

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

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

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

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

(4)编译时的链接是什么意思扩展阅读:

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

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

㈤ c语言中的编辑,编译,连接,运行分别是什么意思

1、编辑:编写代码,制作C语言的源文件。

2、编译:是由编译程序将C语言源文件转换成二进制中间文件,对文件内部的语法语义做处理,如果编译出错,无法进行后续动作。

3、链接:将编译中生成的中间文件组合成二进制可执知行文件,这一步会对文件之间的关联做检查,如果出错,将不会生成可执行文件,也就无法执行。

4、执行:运行可执行文件,这一步道是编写代码的最终目的。

(5)编译时的链接是什么意思扩展阅读:

DOS命令通常分为三类:内部命令、外部命令和批处理命令。

1、内部命令:

其包含在命令解释程序COMMAND.COM中,一旦启动DOS,这些命令就被调入内存,只要在DOS系统提示符下输入这些命令,就可立即执行。

2、外部命令:

其以文件的形式存储在系统盘上,所带扩展名为COM和EXE。DOS启动时,它们并没有被调入内存,执行前必须从系统盘读进内存。因此输入外部命令时,要了解该命令是否在当前盘上,不然DOS无法找到它们。

3、批处理命令:

实际上是个文件,该文件包含多条命令,当用户键入批处理文件名时,DOS将顺序执行其中的各条命令。注意,批处理命令必须用“.BAT”作为扩展名。

C语言的运算非常灵活,功能十分丰富,运算种类远多于其它程序设计语言。在表达式方面较其它程序语言更为简洁,如自加、自减、逗号运算和三目运算使表达式更为简单。

当多种不同运算组成一个运算表达式,即一个运算式中出现多种运算符时,运算的优先顺序和结合规则就会显得十分重要。

网络-运行命令

网络-C语言

㈥ 什么是程序编辑,编译,连接

编辑就是写代码,编写程序。
编译就是将高级语言转换成机器能识别的语言。
链接就是找程序运行是依赖的库文件等。

㈦ 什么叫编译,什么又叫链接

编译就是将源程序翻译为机器代码,机器代码一般以*.obj文件保存。
链接就是将上一步产生的obj文件与操作系统动态库组合为可执行的exe文件。

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

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

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

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

#definepaste(front,back)front##back

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

(8)编译时的链接是什么意思扩展阅读

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;

}


阅读全文

与编译时的链接是什么意思相关的资料

热点内容
矩形密封圈压缩量 浏览:591
电脑设置ntp时间同步服务器地址 浏览:18
怎么更有效招聘对日程序员 浏览:147
命令号角 浏览:275
格力双转子压缩机 浏览:612
hp服务器上的ip地址 浏览:560
c语言编程计算100以内的所有素数 浏览:624
命令输入框 浏览:892
冰箱压缩机发烫噪音 浏览:85
单片机栈溢出符号 浏览:330
命令与征服修改器怎么用 浏览:485
什么app比较费钱 浏览:832
为什么同一个app的功能不一样 浏览:232
小型工作室用什么服务器好 浏览:995
程序员的兴趣 浏览:413
华为服务器有什么好 浏览:701
程序员和测试之间的关系 浏览:945
加密蚊帐什么意思 浏览:151
javalistclear 浏览:607
哪个app上民宿多靠谱 浏览:828