linux动态库和静态库的区别
5个回答
展开全部
静态库:这类库的名字一般是libxxx.a,xxx为库的名字。利用静态函数库编译成的文件比较大,因为整个函数库的所有数据都会被整合进目标代码中,他的优点就显而易见了,即编译后的执行程序不需要外部的函数库支持,因为所有使用的函数都已经被编译进去了。当然这也会成为他的缺点,因为如果静态函数库改变了,那么你的程序必须重新编译。
动态库:这类库的名字一般是libxxx.M.N.so,同样的xxx为库的名字,M是库的主版本号,N是库的副版本号。当然也可以不要版本号,但名字必须有。相对于静态函数库,动态函数库在编译的时候并没有被编译进目标代码中,你的程序执行到相关函数时才调用该函数库里的相应函数,因此动态函数库所产生的可执行文件比较小。由于函数库没有被整合进你的程序,而是程序运行时动态的申请并调用,所以程序的运行环境中必须提供相应的库。动态函数库的改变并不影响你的程序,所以动态函数库的升级比较方便。linux系统有几个重要的目录存放相应的函数库,如/lib /usr/lib。
当要使用静态的程序库时,连接器会找出程序所需的函数,然后将它们拷贝到执行文件,由于这种拷贝是完整的,所以一旦连接成功,静态程序库也就不再需要了。然而,对动态库而言,就不是这样。动态库会在执行程序内留下一个标记指明当程序执行时,首先必须载入这个库。由于动态库节省空间,linux下进行连接的缺省操作是首先连接动态库,也就是说,如果同时存在静态和动态库,不特别指定的话,将与动态库相连接。
动态库:这类库的名字一般是libxxx.M.N.so,同样的xxx为库的名字,M是库的主版本号,N是库的副版本号。当然也可以不要版本号,但名字必须有。相对于静态函数库,动态函数库在编译的时候并没有被编译进目标代码中,你的程序执行到相关函数时才调用该函数库里的相应函数,因此动态函数库所产生的可执行文件比较小。由于函数库没有被整合进你的程序,而是程序运行时动态的申请并调用,所以程序的运行环境中必须提供相应的库。动态函数库的改变并不影响你的程序,所以动态函数库的升级比较方便。linux系统有几个重要的目录存放相应的函数库,如/lib /usr/lib。
当要使用静态的程序库时,连接器会找出程序所需的函数,然后将它们拷贝到执行文件,由于这种拷贝是完整的,所以一旦连接成功,静态程序库也就不再需要了。然而,对动态库而言,就不是这样。动态库会在执行程序内留下一个标记指明当程序执行时,首先必须载入这个库。由于动态库节省空间,linux下进行连接的缺省操作是首先连接动态库,也就是说,如果同时存在静态和动态库,不特别指定的话,将与动态库相连接。
Storm代理
2023-07-25 广告
2023-07-25 广告
StormProxies是一家提供动态代理服务器服务的企业,旨在帮助用户更好地管理网络访问和安全。以下是一些关于StormProxies的IP动态代理服务的特点:1. 高匿名性:StormProxies的动态代理服务器具有高匿名性,可以有效...
点击进入详情页
本回答由Storm代理提供
2022-03-17 · 百度认证:北京一天天教育科技有限公司官方账号,教育领域创作者
关注
展开全部
静态库是什么?可冲定位目标文件以一种特定的方式打包成一个单独的文件,并且在链接生成可执行文件时,从这个单独的文件中拷贝自己需要的内容到最终的可执行文件中,这个单独的文件,被称为静态库,Linux中通常以.a(archive)为后缀。
动态库是什么?动态库可静态库类似,但是它并不在链接时将需要的二进制代码都拷贝到可执行文件中,而是仅仅拷贝一些重定位和符号表信息,这些信息可以在程序运行时完成真正的链接过程,Linux中通常以.so(shared
object)作为后缀。
有什么区别呢?
1、可执行文件大小不一样:静态链接的可执行文件比动态链接的可执行文件要大得多,因为它将需要用到的代码从二进制文件中拷贝了一份,而动态库仅仅是复制了一些重定位和符号表信息。
2、占用磁盘大小不一样:如果有多个可执行文件,那静态库中的同一个函数的代码就会被复制多份,而动态库只有一份,因此使用静态库占用的磁盘空间相比动态库要大。
3、扩展性与兼容性不一样:如果静态库中某个函数的实现变了,那么可执行文件必须重新编译,而对于动态链接生成的可执行文件,只需要更新动态库本身即可,不需要重新编译可执行文件。
动态库是什么?动态库可静态库类似,但是它并不在链接时将需要的二进制代码都拷贝到可执行文件中,而是仅仅拷贝一些重定位和符号表信息,这些信息可以在程序运行时完成真正的链接过程,Linux中通常以.so(shared
object)作为后缀。
有什么区别呢?
1、可执行文件大小不一样:静态链接的可执行文件比动态链接的可执行文件要大得多,因为它将需要用到的代码从二进制文件中拷贝了一份,而动态库仅仅是复制了一些重定位和符号表信息。
2、占用磁盘大小不一样:如果有多个可执行文件,那静态库中的同一个函数的代码就会被复制多份,而动态库只有一份,因此使用静态库占用的磁盘空间相比动态库要大。
3、扩展性与兼容性不一样:如果静态库中某个函数的实现变了,那么可执行文件必须重新编译,而对于动态链接生成的可执行文件,只需要更新动态库本身即可,不需要重新编译可执行文件。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
动态库时 程序运行时 加载的 并不包含在程序本身内.
而静态库则是编译进程序里的, 运行时不需要外部的库, 但这样会使程序本身变的臃肿..
动态库一般是 xxxxx.so.x.xx 前面名称, 后面版本, 动态库也成为共享库.
静态库则是 xxxx.a 以 .a结尾
而静态库则是编译进程序里的, 运行时不需要外部的库, 但这样会使程序本身变的臃肿..
动态库一般是 xxxxx.so.x.xx 前面名称, 后面版本, 动态库也成为共享库.
静态库则是 xxxx.a 以 .a结尾
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Linux中没有动态库,只有称作共享库的类似概念的库。
共享库是被编译成二进制机器码的可执行文件。
静态库是编译成目标代码的不可执行文件,使用静态库需要客户程序通过源代码编译再与静态库一起连接的过程才能变成可执行文件
共享库是被编译成二进制机器码的可执行文件。
静态库是编译成目标代码的不可执行文件,使用静态库需要客户程序通过源代码编译再与静态库一起连接的过程才能变成可执行文件
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询