linux 中添加自己的库路径的方法 cannot open shared object file: No such file or directory

本文转自:http://blog.csdn.net/maotianwang/article/details/44619197

库文档在连接(静态库和共享库)和运行(仅限于使用共享库的程式)时被使用,其搜索路径是在系统中进行配置的。一般 Linux 系统把 /lib 和 /usr/lib 两个目录作为默认的库搜索路径,所以使用这两个目录中的库时无需进行配置搜索路径即可直接使用。对于处于默认库搜索路径之外的库,需要将库的位置添加到库的搜索路径之中。配置库文档的搜索路径有下列两种方式,可任选其一使用:

    在环境变量 LD_LIBRARY_PATH 中指明库的搜索路径。

    在 /etc/ld.so.conf 文档中添加库的搜索路径。

    将自己可能存放库文档的路径都加入到/etc/ld.so.conf中是明智的选择

    添加方法也极其简单,将库文档的绝对路径直接写进去就OK了,一行一个。例如:

    /usr/X11R6/lib

    /usr/local/lib

    /opt/lib

    需要注意的是:第二种搜索路径的配置方式对于程式连接时的库(包括共享库和静态库)的定位已足够了,但是对于使用了共享库的程式的执行还是不够的。这是因为为了加快程式执行时对共享库的定位速度,避免使用搜索路径查找共享库的低效率,所以是直接读取库列表文档 /etc/ld.so.cache 从中进行搜索的。/etc/ld.so.cache 是个非文本的数据文档,不能直接编辑,他是根据 /etc/ld.so.conf 中配置的搜索路径由 /sbin/ldconfig 命令将这些搜索路径下的共享库文档集中在一起而生成的(ldconfig 命令要以 root 权限执行)。因此,为了确保程式执行时对库的定位,在 /etc/ld.so.conf 中进行了库搜索路径的配置之后,还必须要运行 /sbin/ldconfig 命令更新 /etc/ld.so.cache 文档之后才能够。ldconfig ,简单的说,他的作用就是将/etc/ld.so.conf列出的路径下的库文档缓存到/etc/ld.so.cache 以供使用。因此当安装完一些库文档,(例如刚安装好glib),或修改ld.so.conf增加新的库路径后,需要运行一下 /sbin/ldconfig使任何的库文档都被缓存到ld.so.cache中,假如没做,即使库文档明明就在/usr/lib下的,也是不会被使用的,结果编译过程中抱错,缺少xxx库,去查看发现明明就在那放着,搞的想大骂computer蠢猪一个。

    在程式连接时,对于库文档(静态库和共享库)的搜索路径,除了上面的配置方式之外,还能够通过 -L 参数显式指定。因为用 -L 配置的路径将被优先搜索,所以在连接的时候通常都会以这种方式直接指定要连接的库的路径。

    前面已说明过了,库搜索路径的配置有两种方式:在环境变量 LD_LIBRARY_PATH 中配置连同在 /etc/ld.so.conf 文档中配置。其中,第二种配置方式需要 root 权限,以改变 /etc/ld.so.conf 文档并执行 /sbin/ldconfig 命令。而且,当系统重新启动后,任何的基于 GTK2 的程式在运行时都将使用新安装的 GTK+ 库。不幸的是,由于 GTK+ 版本的改变,这有时会给应用程式带来兼容性的问题,造成某些程式运行不正常。为了避免出现上面的这些情况,在 GTK+ 及其依赖库的安装过程中对于库的搜索路径的配置将采用第一种方式进行。这种配置方式无需 root 权限,配置也简单:

    $ export LD_LIBRARY_PATH=/opt/gtk/lib:$LD_LIBRARY_PATH

    能够用下面的命令查看 LD_LIBRAY_PATH 的配置内容:

    $ echo $LD_LIBRARY_PATH

    至此,库的两种配置就完成了。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux系统,当你尝试调用一个共享对象文件(.so文件)时,如果系统找不到该文件或者文件路径不正确,就会出现"cannot open shared object file: No such file or directory"的错误。这个错误通常是由于以下几个原因引起的: 1. 文件路径错误:确保你提供的文件路径是正确的,并且文件存在于该路径下。你可以使用绝对路径或者相对路径来指定文件路径。 2. 缺少依赖:共享对象文件可能依赖于其他文件,如果这些依赖文件不存在或者路径不正确,就会导致无法打开共享对象文件。你可以使用ldd命令来查看共享对象文件的依赖关系,并确保所有依赖都存在。 3. 权限问题:确保你对共享对象文件及其所在目录具有足够的权限。你可以使用chmod命令来修改文件权限。 4. 环境变量配置问题:如果共享对象文件所在的路径没有被正确地添加到LD_LIBRARY_PATH环境变量,系统就无法找到该文件。你可以使用export命令来设置LD_LIBRARY_PATH环境变量,或者将路径添加到/etc/ld.so.conf文件并运行ldconfig命令来更新动态链接器的配置。 下面是一个示例,演示了如何解决"cannot open shared object file: No such file or directory"错误: 假设你的共享对象文件名为libexample.so,位于/home/user/example目录下。 ```shell # 确保文件路径正确 ls /home/user/example/libexample.so # 检查依赖关系 ldd /home/user/example/libexample.so # 设置LD_LIBRARY_PATH环境变量 export LD_LIBRARY_PATH=/home/user/example:$LD_LIBRARY_PATH # 运行程序 ./your_program ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值