C语言中"程序文件的连接"与"文件包含"有什么区别和联系

C语言中"程序文件的连接"与"文件包含"有什么区别和联系,第1张

解答:

比如有三个文件,ah , ac ,bc

然后你想通过在bc中include "ah",来调用ah中声明的函数,ah中声明的函数在ac中定义。

那么你就必须在编译,连接时把ac和bc连接在一起才行。

静态、共享和动态库

C语言中有一些函数不需要进行编译,有一些函数也可以在多个文件中使用。一般来说,这些函数都会执行一些标准任务,如数据库输入/输出 *** 作或屏幕控制等。可以事先对这些函数进行编译,然后将它们放置在一些特殊的目标代码文件中,这些目标代码文件就称为库。库文件中的函数可以通过连接程序与应用程序进行连接。这样就不必在每次开发程序时都对这些通用的函数进行编译了。

库可以有三种使用的形式:静态、共享和动态。静态库的代码在编译时就已连接到开发人员开发的应用程序中,而共享库只是在程序开始运行时才载入,在编译时,只是简单地指定需要使用的库函数。动态库则是共享库的另一种变化形式。动态库也是在程序运行时载入,但与共享库不同的是,使用的库函数不是在程序运行开始,而是在程序中的语句需要使用该函数时才载入。动态库可以在程序运行期间释放动态库所占用的内存,腾出空间供其它程序使用。由于共享库和动态库并没有在程序中包括库函数的内容,只是包含了对库函数的引用,因此代码的规模比较小。

1, 静态库可以认为是一些目标代码的集合。按照习惯,一般以"a"做为文件后缀名。使用ar(archiver)命令可以创建静态库。因为共享库有着更大的优势,静态库已经不被经常使用。但静态库使用简单,仍有使用的余地,并会一直存在。

静态库在应用程序生成时,可以不必再编译,节省再编译时间。但在编译器越来越快的今天,这一点似乎已不重要。如果其他开发人员要使用你的代码,而你又不想给其源码,提供静态库是一种选择。从理论上讲,应用程序使用了静态库,要比使用动态加载库速度快1-5%,但由于莫名的原因,实际上可能并非如此。由此看来,除了使用方便外,静态库可能并非一种好的选择。

2,共享库

共享库是在程序启动时被装载。当一个应用程序装载了一个共享库后,其它应用程序仍可以装载同一个共享库。基于linux的使用方法,共享库还有其它灵活的而又精妙的特性:

更新库并不影响应用程序使用旧的,非向后兼容的版本;在执行特定程序时,可以覆盖整个库或更新库中的特定函数;以上 *** 作不会影响已经运行的程序,他们仍会使用已经装载的库。

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

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

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

扩展资料:

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

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

是自动配置服务器

在SIP通信里,ACS服务器一般指的是自动配置服务器,一般用于较大规模SIP话机部署方案里,方便配置下发,省的一台一台话机进行信息配置。ACS服务器向你的SIP话机下发配置信息,话机获取配置后再向SIP服务器发起注册。如果ACS连接失败,那话机获取不到配置信息就谈不上成功注册了。

所以,从过程来看话机SIP注册失败的可能故障点有多个需要排查,可能是网络连通有问题,也可能是话机或是ACS配置信息的问题,需要对比排查。建议联系售后查看,会看的人很容易就排除了,不会的人不值当浪费时间去折腾。

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

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

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

比如 printf,程序代码里没有它内部实现的代码,只是说要调用这个功能。

连接程序会把它内部实现代码从 Run-time 库里提出来,放在一起,这样程序才可以单独执行。

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

另外,一些比较大的程序,可能会分若干个文件,它们互相调用彼此的函数。可以独立编译成若干个目标代码。如果这些函数有的缺失了,编译也可以通过。

这样做的好处是,对于大型程序,分成若干部分分别编译,加快了编译过程。同时,减少每个源码文件的行数。

比如,写一个计算程序。后台计算有一个文件,可以编译成功。前台界面有一个文件,也可以编译成功。它们分辨编译成两个不同的目标代码文件(obj 或其他)

然后经过链接过程

这个例子的话,可以认为有这个式子:

前台obj + 后台obj + + 第三方函数库 + Run-time 库 = Exe

链接的时候,才会检查这种相互依赖是否完整。

比如前台部分是否使用了有些函数,而这些函数在后台处理模块中并不存在或者忘记写这个函数了?

或者是否调用了一个后台函数,而这个函数的参数与调用的时候根本不一致?

发生这些情况时,才会给出链接警告和错误。

编译主要工作是检查一下你的源代码,看看它是否能够读懂,如果可以完全明白,就把你的源代码变成一种计算机更方便处理的文件,通常我们称为目标文件,常用后缀obj 或o,编译的工作就结束了。

链接程序的拿到目标文件后,进行装配工作。因为你设计的程序中,要不是调用自己设计的功能,要不调用系统提供的功能。链接就是把根据你程序说明的调用关系,找到相应的程序,把它们拼接起来,形成可以被 *** 作系统执行的文件,也就是可执行文件。

你是不是想实现两个PLC 直接的通信啊?

如果是这样的话,就方便了啊。

因为三菱PLC 本身就有并联通信的功能

-------------------------------------------------------------------------

三菱网站上有个通信手册,专门将 多个三菱PLC并联通信的信息,建议你去下载并仔细阅读一下

以上就是关于C语言中"程序文件的连接"与"文件包含"有什么区别和联系全部的内容,包括:C语言中"程序文件的连接"与"文件包含"有什么区别和联系、动态链接和静态链接分别是什么含义他们有什么区别、C语言编辑编译连接的作用是什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10092405.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存