请教关于linux中静态库与动态库的问题

我的理解是这样的:编译程序时,如果有用到静态库,则编译器会把静态库中你所需要的函数直接加入到你的源程序中再进行编译。如果是用到了动态库,则编译器在编译时,只是确定一下是否... 我的理解是这样的:编译程序时,如果有用到静态库,则编译器会把静态库中你所需要的函数直接加入到你的源程序中再进行编译。 如果是用到了动态库,则编译器在编译时,只是确定一下是否能在相关路径下找到你所需的库,然后当程序运行时再去找相关的库,调用库中的函数。

请问下我的理解是不是正确的?
展开
 我来答
judymac01
2013-05-10 · 超过15用户采纳过TA的回答
知道答主
回答量:21
采纳率:0%
帮助的人:46万
展开全部
哈哈,简单的来说可以按你这么理解,静态库就是在打包在程序里面的,而动态库是和程序分离开的,是程序需要的时候动态装配进内存的。

说一下我自己的理解和经验吧:动态库之所以会用到,是因为有些库会被多个程序用到,拿windows的例子来说吧,比方说你开两个游戏,一个魔兽,一个极品飞车,这两个都要用到activex 这个库,如果做为动态库,两个程序共用一个,但是静态库就要分别为两个游戏都生成库,如果更多的话,这样就浪费了内存很多空间。

静态库是和程序一起装入内存的(其实静态库已经成为程序的一部分),而动态库是动态装入内存的,如果内存不大,又使用静态库,必然会发生很多的缺页中断,这样效率会很低哦,你有兴趣可以多多研究一下内存的一些算法,linux kernel有现成的分页算法,会对你很有帮助的。

如果缺页中断不太明白的话可以看看操作系统的书,或者追问我,大家一起切磋交流~
Storm代理
2023-07-25 广告
StormProxies是一家提供动态代理服务器服务的企业,旨在帮助用户更好地管理网络访问和安全。以下是一些关于StormProxies的IP动态代理服务的特点:1. 高匿名性:StormProxies的动态代理服务器具有高匿名性,可以有效... 点击进入详情页
本回答由Storm代理提供
xmenlab
2013-05-09 · TA获得超过180个赞
知道小有建树答主
回答量:96
采纳率:0%
帮助的人:138万
展开全部
可以这样理解.

当和静态库一起编译后,可执行程序将会比较大,且用ldd查看的时候,结果为“not a dynamic executable ”.
当和动态库一起编译后, 可执行程序比较小, 用ldd查看的时候, 显示可执行程序依赖很多库, 比如
$ ldd a.out
linux-vdso.so.1 => (0x00007fff964bf000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f87f0695000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f87f0478000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f87f0274000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f87efeed000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f87efcd6000)
/lib64/ld-linux-x86-64.so.2 (0x00007f87f0936000)
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式