一般我们在下执行某些外部程序嘚时候可能会提示找不到共享库的错误, 比如:
原因一般有两个, 一个是里确实没有包含该共享库(lib*.so.*文件)或者共享库版本不对, 遇到这种情况那就去網上下载并安装上即可.
另外一个原因就是已经安装了该共享库, 但执行需要调用该共享库的程序的时候, 程序按照默认共享库路径找不到该共享库文件.
所以安装共享库后要注意共享库路径设置问题, 如下:
ldconfig命令的用途, 主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下, 搜索絀可共享的error1114动态链接库库(格式如lib*.so*), 进而创建出动态装入程序(ld.so)所需的连接和缓存文件. 缓存文件默认为/etc/ld.so.cache, 此文件保存已排好序的error1114动态链接库库名字列表.
2) 如果共享库文件安装到了/usr/local/lib(很多开源的共享库都会安装到该目录下)或其它"非/lib或/usr/lib"目录下, 那么在执行ldconfig命令前, 还要把新共享库目录加入到共享庫配置文件/etc/ld.so.conf中, 如下:
LD_LIBRARY_PATH的意思是告诉loader在哪些目录中可以找到共享库. 可以设置多个搜索目录, 这些目录之间用冒号分隔开. 比如安装了一个到/usr/local/mysql目录下,
┅般来讲这只是一种临时的解决方案, 在没有权限或临时需要的时候使用.
如果程序需要的库文件比系统目前存在的库文件版本低可以做一個链接。比如:
一.一般安装动态库方式
二.找不到共享库文件的原因
1.压根就没有此共享库也就是说系统中根本就没有此库或者说没装,这時从网上下载一些词库装上去即可;
2.已经安装了该共享库, 但执行需要调用该共享库的程序的时候, 程序按照默认的路径找不到共享库,这吔是众多人面对的情形下面主要针对此原因进行说明。
三.linux寻找error1114动态链接库库的顺序
1.编译代码时指定的动态库搜索路径这里说明一下,鈈是Makefile中的-L等指定的目录;
四.基于顺序的解决方法
在程序文件中的.dynamic段包含了一个叫DT_RPATH的项是一个以冒号分隔的库文件搜索目录列表,用以搜索动态库
在编译程序时,加入 ”-WI,-rpath =目录“选项即将动态库文件搜索路径加入到可执行的连接文件中,如一个程序main需要使用libaa.so库
在其下面添加一行动态库的搜索目录,然后在终端输入ldconfig命令即可
ldconfig是个什么东东?它是一个linux程序通常在/sbin下,是root权限的简单的说,它的作用是将/etc/ld.so.conf列出的路径下的库文件
4和5.将库文件放在这两个系统默认搜索路径下即可
五.明明安装了高版本,但是还是嫌库版本低
一般在编译安装库时会出现类似如下情形(编译gtk -2.4.13):
那这三个红色表明的是干什么用的呢?
pkg-config用来向configure程序提供系统软件信息如软件的版本、库的版本、路径等,这些信息都放在*.pc下