LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1074|回复: 12

请问为何要使用静态连接库?

[复制链接]
发表于 2005-6-2 19:43:50 | 显示全部楼层 |阅读模式
静态连接库很占内存,而且必须有头文件和lib文件,似乎很不方便

为什么动态连接库不能将其淘汰?它一定有它的优势吧?

哪位大哥帮忙解个疑哇~~~
发表于 2005-6-2 19:45:59 | 显示全部楼层
动态链接也必须有头文件和lib文件啊。
静态链接的好处是速度快,而且在没有动态链接库的系统上也可以运行程序。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-6-2 19:52:39 | 显示全部楼层
好像有点明白了,不过这句话还不是很明白透===>“而且在没有动态链接库的系统上也可以运行程序。”

是说不是所有系统都支持dll吗?

那我们写类库的时候,除了操作系统缘故以外,应该怎么考虑什么时候写成动态的,什么时候写成静态的呢?

感恩阿~~
回复 支持 反对

使用道具 举报

发表于 2005-6-2 19:53:48 | 显示全部楼层
链接了动态库的程序的调试方法有没有谁试过
我一直没成功过
回复 支持 反对

使用道具 举报

发表于 2005-6-2 19:57:19 | 显示全部楼层
Post by 八爪魚
好像有点明白了,不过这句话还不是很明白透===>“而且在没有动态链接库的系统上也可以运行程序。”

是说不是所有系统都支持dll吗?

那我们写类库的时候,除了操作系统缘故以外,应该怎么考虑什么时候写成动态的,什么时候写成静态的呢?

感恩阿~~

先去看一下我的blog吧,上面有关于库的基本知识
还有不明白的再问   
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-6-2 20:00:22 | 显示全部楼层
好的,谢谢你们了,看来从调试角度来考虑动态连接库也是一个问题
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-6-2 20:16:33 | 显示全部楼层
看了你的那篇文章,终于了解了,还说说出来看看这么理解对不对

不管哪种库,都有lib文件,而且只是在编译连接的时候才会用到lib文件,在可执行文件执行的时候(如:执行exe文件)是不会用到lib的,但是,静态可执行文件会相对变大,而动态的则会小一些,而且在执行可执行程序的时候必须带有dll文件

目前考虑使用哪种库的时候,

第一,要看系统是否支持动态连接库

第二,是要看是不是一些很要求速度的运算,如果是就最好用静态的

第三,考虑程序调试的问题,至于这点还有待尝试

第四,。。。。。。总结中

这么理解对吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-6-3 00:31:50 | 显示全部楼层
第四,静态连接库如果要修改,所有的调用到它的可执行程序都要重新生成:(

第五,体会研究中……
回复 支持 反对

使用道具 举报

发表于 2005-6-3 10:31:39 | 显示全部楼层
只是链接静态库的程序在编译完后才不需要库了
链接动态库的还是需要的

p.s. 这些问题我都说了啊,难道我没说清楚?
回复 支持 反对

使用道具 举报

发表于 2005-6-3 12:58:50 | 显示全部楼层
以前用nasm写的程序, 编译成动态库连接后老是崩溃, 编译成静态库就没有问题, 后来才知道这和代码是否"位置无关"(PIC)有关系, 但是用汇编写PIC麻烦得要死, 于是就一直用静态库了.

不过静态库在系统维护时挺有用的, 比方glibc升级失败, 用动态库的程序立马歇菜, 用静态库的却还可以用.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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