打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
当一个库被连接到目标上时,库中的所有函数是否都会被加到一个.EXE文件中?

不会。当启动连接程序时,它会寻找“未定义的外部函数”,也就是说,它将在每一个库文件中查找源代码文件中未定义的函数。当它找到一个未定义的外部函数后,它会引入包含该函数定义的目标代码。(obj)。不幸的是,如果这个函数是在一个包含其它函数定义的源文件中被编译的话,那么这些函数也会被包含进来,你的可执行代码中将包含一些不需要的代码。因此,将库函数放到各自的源文件中是很重要的——否则会浪费宝贵的程序空间。有些编译程序包含
特殊的“精明的”连接程序,这些连接程序能查出不需要的函数并去掉它们,从而使这些函数不再进入你的程序。

下面举一个例子:假设有两个源文件,分别为libfunc1.c和libfunc2.c,它们所包含的函数都要被放到一个库中。源文件libfunc1.c包含以下两个函数:
    void func_one ()
    {
       ...
    }
    void rune_two()
    {
       ...
    }

源文件libfunc2.c包含以下函数:
    void func_three()
    {
       ...
    }
现在假设已经把这两个源文件编译到一个名为myfuncs.1ib的库中。如果一个与myfuncs.lib连接的程序要调用func_one()函数,连接程序就会在myfuncs.lib库中寻找包含func_one()函数定义的目标代码,并且把它连接进来。不幸的是,函数func_one()是在包含func_two()函数定义的同一个源文件中被编译的,因此,即使你的程序不会用到func_two(),连接程序也不得不把它连接进来。当然,这里假设func_one()中并没有包含对func_two()的调用。如果一个程序包含一个对func_three()的调用,那么只有func_othree()的目标代码会被连接进来,因为该函数是在它自己的源文件中被编译的。

一般说来,你应该尽量把库函数放到各自的源文件中。这种组织方式有助于提高程序的效率,因为程序只会和那些真正需要的函数进行连接,而不会和那些不需要的函数进行连接。这种组织方式在小组开发的情况下也是很有帮助的;在小组开发中,源文件的上交和发放非常频繁,如果一个程序员要对一个包含在其自身的源文件中的函数进行维护,那么他可以集中维护这个函数;如果这个函数所在的源文件中还包含其它一些需要维护的函数,那么这些函数就无法发放给其它小组成员,因为它们包含在一个源文件中。

---------------
可以把多个库函数包含在同一个源文件中吗?
在同一个源文件中,你想要定义多少个函数,就可以定义多个函数,并且可以把它们都包含到一个库中——然而,在小组开发环境中连接程序和共享源文件时,这种编程风格存在着严重的缺陷。
当你在一个源文件中包含多个库函数时,这些函数会被编译到同一个目标(.obj)文件中。当连接程序要把其中的一个函数连接到程序中去时,目标文件中的所有函数都将被连接进来---不管程序是否用到它们。如果这些函数是无关的(在它们的定义中没有相互调用),那么会因为把不需要的代码连接进来而浪费宝贵的程序空间,见18.7中的例子。这就是要把库函数放到各自的源文件中的原因之一。
另一个原因是为了在小组开发环境下便于进行代码共享。使用独立的源文件能使小组程序员上交和收回单独一个函数,而不必先锁住源文件中的一些函数,然后才能修改源文件中的其它函数。
为什么要建立一个库?
建立一个数据库是为了把可重复使用的函数放在一起,供其它程序员和程序共享。例如,你的几个程序可能都会用到一些通用的功能函数,你不必在每个程序中都复制这些源代码,而只需把这些函数集中到一个函数库中,然后用连接程序把它们连接到你的程序中去。这种方法有利于程序的维护,因为你可以在一个集中的地方而不是几个分散的地方维护你的函数。
如果你在小组环境中工作,那么你应该把你的可重复使用的函数放到一个库中,这样其它小组成员就可以把你的函数连接到他们的程序中去,从而节省了他们复制或从头开始写这些函数的时间。此外,在一个包含几个模块的大项目中,可以把那些自始至终都要用到的“框架”支持函数包含到一个库中。
编译程序中包含一个库管理器(通常叫做LIB.EXE或其它类似的名字),可用来在函数库中增减目标代码模块(.obj)。有些编译程序允许你在它们的集成开发环境中维护你的库,而不必人为地启动库管理器。无论如何,你都应该参考一下18.7和18.8。其中有一些有关建库的重要信息和有用的技巧。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
linux下 怎样把代码编译成库?
编写第一个C语言程序
gcc的使用简介与命令行参数说明
数组拾遗
linux静态库的生成与使用
Linux下如何编译并运行C程序
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服