1、静态库与动态库
所谓的库,其实都是一些二进制的可执行文件集合,静态库在linux中一般命名形式为libxxx.a,而动态库一般常用libxxx.so。
他们都可以通过源文件编译得到,往期对这两种库都过介绍:
Linux应用编程之静态库的制作与使用
Linux应用编程之动态库的制作与使用
Linux应用编程之动静态链接库辅助技巧(ldd,-static)
对于静态库主要是用于程序编译的过程中提供相应的函数实现,最终使用到该静态库中的内容会整合到最终的程序中,这样程序在运行过程中就不再依赖外部其他库了。
而动态库并不是用于编译期,而是在运行期通过动态加载器来加载库函数,使得可执行程序得以运行,当然动态链接也分不同的加载时期,相对比较灵活,有些程序一运行就需要进行加载,而有些的动态库是在执行过程中加载。
2、动静态库优缺点
那么动态库与静态库的优缺点也比较明显,使用静态库编译生成的可执行文件对外界没有什么需求,依赖少,相应的其可执行程序体积变大,一旦修改需要重新编译。
而对于动态库,由于是程序运行时候加载相应的动态库,所以其可执行文件相对要小很多,同时对于库的修改,仅仅编译和替换相应的动态库即可,更加的方便。
3、Linux中动态库的查找
由于可执行程序依赖动态链接库,所以存在一个问题:从哪里找动态链接库?,经常我们动态编译的可执行应用程序,由于系统中、或者自己没有指定相应的库路径,就会报运行失败,提示缺少相应的库。
这样就需要在系统中安装对应的库,并且把库放在动态加载器所能搜索到的位置,在linux中有如下几种搜索路径:
1、在可执行程序编译的时候通过编译选项指定相应的动态库路径,这样在程序运行的时候就会在文件系统对应路径加载对应的动态库,比如通过使用-Wl,-rpath=your path来进行编译,编译成功的可执行程序你可以使用ldd命令来查看是否路径指定成功,可执行程序几乎是第一时间搜索该路径查看动态库是否存在。
2、通过使用环境变量 : LD_LIBRARY_PATH指定,可以使用如下命令进行查看:
1echo $LD_LIBRARY_PATH
通过export在已有的路径上进行添加:
1export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:your path
跟之前给大家介绍的PATH环境变量的使用是一致的,当可执行程序找到指定路径,会在该环境变量中指定的路径进行查找,当然修改该环境变量会影响到所有的应用程序动态加载的搜索。
3、系统默认的路径/lib和/user/lib进行搜索,当然在用户级的程序大部分都会安装在/usr/local中,所以用户级的库大部分也会放在/user/local/lib路径中。
4、当然在Ubuntu中还通常在配置文件/etc/ld.so.conf中指定的动态库搜索路径,不过要记得当我们把相应的动态库路径添加进入以后,需要使用ldconfig进行配置才能生效。
最 后
好了,这里小哥就简单介绍了动态库与静态库的差异,以及Linux系统一般如何搜索动态库,本系列文章后续还会更新,记得关注学习哦。
-
Linux
+关注
关注
87文章
11217浏览量
208827 -
函数
+关注
关注
3文章
4301浏览量
62387 -
静态库
+关注
关注
0文章
21浏览量
7420
发布评论请先 登录
相关推荐
评论