C语言,用一个库,比如OpenSSL的时候,为什么要分静态库和头文件呢。有

了头文件不就可以调用类了?为什么还要链接静态库呢?C++编程C语言库... 了头文件不就可以调用类了?为什么还要链接静态库呢? C++ 编程 C语言 库 展开
 我来答
zjfaok
2016-04-25 · TA获得超过6807个赞
知道大有可为答主
回答量:4146
采纳率:62%
帮助的人:1750万
展开全部
就像开车,没方向盘,没油门,不管怎样的司机都没法把车开起来。但是只有方向盘和油门,没有轮子和发动机,车也不可能开起来。

库文件就像轮子和发动机,没有它,库就是空壳而已,动不起来。但是只有轮子和发动机,也是不能用的,要让它在合适的地方动起来,按自己的想法行动,到达自己想要的目的,就要包含头文件,然后用头文件提供的功能控制它的行动
追问
你这个比喻太抽象了,不是很懂。。。我是说,有了头文件,编译的时候直接编译头文件的代码不就就好了,为什么还要连接库呢
追答
因为头文件的代码不是全部内容,如果要把全部内容都放在头文件,是不经济的

1. 要让库具有足够的效率,需要使用特定的编译选项

库的实现是由作者辛辛苦苦写出来的,如果是成熟的库,一定经过很多轮改进,以保证它能够有最高的效率。如果编译使用的参数与作者原本预期的不符,轻则严重降低库的效率,重则因编译器过度关心而造成编译错误,如果不巧遇到编译器内部的BUG,还可能让库的运行一团糟——因此要编译一个库,一些编译参数是必要的,一些编译参数是不能要的,一些功能又需要在编译这个库的时候用到其他的库文件(比如fcvt是常见的功能,在系统已经实现了fcvt的时候就不需要自己定义fcvt,但是要用系统的东西就要加上系统的库,而系统的库可能很大——这样可以先编译再把不需要的部分strip掉),对于使用者,记住这些事是个负担
2. 库的编译需要相当长的时间
库本身相当复杂,具有很多内容,要处理复杂、内容多的东西,就需要更多时间。另外为了库的高效运作,需要编译器做更高的优化,这就意味着编译器要做更多的工作,更多的工作一般也意味着更多的时间。再有,还存在因为用错编译选项而做了无用功的情况。谁也不希望每天花四五个小时等着程序编译出来吧
3. 一些实现是商业机密,这就不多提了

回到开车的比喻,谁也不希望每次开车前先手动组装一遍发动机吧
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式