veket官方网站论坛

veket

 找回密码
 要注册
搜索
查看: 15864|回复: 36

什么是“库”,调试库 Vs. 发行库,静态库 Vs. 动态库

[复制链接]
发表于 2009-3-18 17:55 | 显示全部楼层 |阅读模式
Code::Blocks下载(中文版)( 集成开发环境 IDE)
http://www.lucky8k.com/thread-63308-1-1.html

什么是“库”

怎么理解“C++语言”和“C++库”之间的关系呢?打个比方就像我们学会了英语,但不一定就能成为一名英语作家,要想用英语写出优美的文章,最好手头有套《莎士比亚全集》。我们要想用C++语言写软件,不仅要学会语言本身,还得学会相关的“库”。

C++自带了一套代码库,通常称之为“C++标准库”,由于C++与C的“血缘关系”,所以“C++标准库”也包含了“C标准库”——但光有标准库还远远不够,于是就有了“C++扩展库”。

“库” 通常包含了许多用于实现特定功能的代码,从存在形式上区分,库可以就是一堆源文件,也可以是编译之后的二进制文件,或者是二者兼而有之。这几种类型的库,在本章我们都将碰上。对于纯源代码形式的库,安装工作实在太简单了:创建一个文件,把库文件保存进入去完成了;对于需要编译的库,本书负责提供详细,手把手的教程;您则负责提供:细心、耐心,还有决心。

和“软件”或“程序”的概念不同,“库”文件虽然也是由“代码”写成,但“软件”或“程序”通常可以独立运行,而“库”文件无法独自运行,虽然它能提供许多强大的功能,但它需要程序来调用。就像一个军火库,里面有许多兵器:AK-47步枪,有M9手枪、有坦克、大炮……好的兵器需要好的战士来使用。一个自称对C ++语言非常熟悉的程序员,手里却没有几套玩得好的“库”就想写程序,那就像一身肌肉的007,手里拧把菜刀,嗷嗷叫着扑向战场一样悲壮。

纯源代码形式的库,在使用上也非常简单:直接将源文件加入我们所写的程序项目中,参加编译即可。需要编译的库,则又复杂一些,同一份源代码,我们可以将它编译成不同目标的二进制库,其中最典型的区分是:“调试库”、“发行库”;及“静态库”、“动态库”。
 楼主| 发表于 2009-3-18 17:56 | 显示全部楼层

调试库 Vs. 发行库

*   调试库 Vs. 发行库

“调试版”和“发行版”二者的区别在于:前者含有调试信息,而后者没有。有调试信息的库,有利于我们纠出程序中的错误,不过因为含有调试信息,所以调试版的库通常 “长得比较胖”(编译后的二进文件体积比较大)。如果觉得错误纠得差不多了,我们就可以改用相对“苗条”的发行版。

    * 静态库 Vs. 动态库

二者分别是对“静态链接库”和“动态链接”的一种简称。

“静态链接”是指,直接将库文件和程序文件合成一个大文件,在合并过程中,完成对库文件各个功能的定位。这个事情发生程序编译的过程。

“动态链接”与此相反,库文件和程序文件各自独立存在,程序在运行时,才去库文件中查找相关的功能。

完全使用“静态链接”,我们可能会得到一个“胖胖”的程序,直接发给用户使用就可以了。使用“动态链接”,我们可能需要分发给你的用户多个文件(程序和各个库文件)。不小心弄丢了哪个文件,用户们就要抱怨你的软件“跑”不起来了。

稍微复杂的软件,通常都采用“动态链接”技术。当然,为了解决分发多个文件的繁琐,通常我们可以另外做一个“安装”程序。相信您也经常安装软件,对这一点会很熟悉.
发表于 2009-3-18 22:23 | 显示全部楼层

拜读了

多谢。我喜欢这样的文章,读起来很舒服。
发表于 2009-3-18 22:34 | 显示全部楼层
学习一下,虽然用不到。
发表于 2009-3-19 09:48 | 显示全部楼层
谢谢分享。
您需要登录后才可以回帖 登录 | 要注册

本版积分规则

QQ|手机版|Archiver|veket官方网站论坛 ( 粤ICP备 11052856 )

GMT+8, 2024-4-29 20:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表