2013-10-22 10:26:52 a19860903 阅读数 6315
  • 马哥Linux教程-Linux操作系统基础由浅入深全面讲解1

    本课程为全新马哥Linux全套系列课程之一--Linux基础入门和架构了解,从Linux起源,Linux架构和Linux形成历史开始逐步讲解,让你彻彻底底了解Linux的诞生,之后介绍了Linux相关文化和核心组成结构,以及Linux常用命令和基本用法,课程由浅入深,讲授方法受到98%学员一致好评!

    19317 人正在学习 去看看 马永亮
运行时使用非标准位置/usr/lib和/lib下的库的方式有三种:
(1) 设置$LD_LIBRARY_PATH=库所在目录(多个目录用:分隔),系统加载工具ld.so/ld-linux.so将顺序搜索变量指定的目录。例如#$LD_LIBRARY_PATH=/usr/local/mysql/lib ./test_mysql
(2) 以root身份把库路径加入/etc/ld.so.conf或在/etc/ld.so.conf.d中创建特定的.conf文件,然后运行ldconfig更新/etc/ld.so.cache。例如:在/etc/ld.so.conf.d下创建文件mysql.conf写入/usr/local/mysql/lib
(3) 另一种办法就是把需要的库copy到/usr/lib或/lib,但这不是建议的方法,特别是尽量避免copy发到/lib。但这种方法可以在编译时免去用-L选项。
2018-12-03 13:06:40 xiaoli200610504109 阅读数 215
  • 马哥Linux教程-Linux操作系统基础由浅入深全面讲解1

    本课程为全新马哥Linux全套系列课程之一--Linux基础入门和架构了解,从Linux起源,Linux架构和Linux形成历史开始逐步讲解,让你彻彻底底了解Linux的诞生,之后介绍了Linux相关文化和核心组成结构,以及Linux常用命令和基本用法,课程由浅入深,讲授方法受到98%学员一致好评!

    19317 人正在学习 去看看 马永亮
一般 Linux 系统把 /lib 和 /usr/lib 两个目录作为默认的库搜索路径,所以使用这两个目录中的库时不需要进行设置搜索路径即可直接使用。对于处于默认库搜索路径之外的库,需要将库的位置添加到库的搜索路径之中。
修改系统文件/etc/ld.so.conf,添加路径(例如:/usr/local/lib),运行ldconfig命令。
2018-04-02 16:42:43 wudi_X 阅读数 1795
  • 马哥Linux教程-Linux操作系统基础由浅入深全面讲解1

    本课程为全新马哥Linux全套系列课程之一--Linux基础入门和架构了解,从Linux起源,Linux架构和Linux形成历史开始逐步讲解,让你彻彻底底了解Linux的诞生,之后介绍了Linux相关文化和核心组成结构,以及Linux常用命令和基本用法,课程由浅入深,讲授方法受到98%学员一致好评!

    19317 人正在学习 去看看 马永亮

在linux上配置caffe上经常会遇到各种错误,其中就包括ld error,即链接库无法找到之类的错误,因此在这里总结一下linux动态库搜索路径的配置。

动态链接库

动态链接库是程序运行时需要加载的库,类似windows里的dll,常以.so结尾,里面打包了c/c++程序的一些具体实现。
当我们运行某个程序需要依赖某个动态库时,就需要给程序指定该动态库的路径。

动态库路径

动态库的搜索路径可以通过以下方式配置:

  1. 根据LD_LIBRARY_PATH这个环境变量来找,可以通过在~/.bashrc中加入export LD_LIBRARY_PATH=/XXX:$LD_LIBRARY_PATH来配置该环境变量,然后用source ~/.bashrc使其生效。
  2. 更改配置文件/etc/ld.so.conf,加入搜索路径。
  3. 进到/etc/ld.so.conf.d/目录下,会有很多*.conf文件,可以加入自定义的.conf文件来配置搜索路径,比如opencv的配置文件opencv.conf中加入/usr/local/lib,让系统在该路径下去找opencv的libraries (libopencv*.so*)。

链接错误解决方法

如果遇到ld错误,说找不到某某库文件 (.so),则需先在系统中搜索该库文件是否存在,用locate libxxx.so。若存在,则是因为系统找不到该库文件,需要按照上述方式手动添加;若不存在,则可用apt-get安装库或者下载源码libxxx.tar.gz自行编译。
(先写到这里吧,后续有再补充…)

2015-06-03 16:28:27 zhang1990214 阅读数 2807
  • 马哥Linux教程-Linux操作系统基础由浅入深全面讲解1

    本课程为全新马哥Linux全套系列课程之一--Linux基础入门和架构了解,从Linux起源,Linux架构和Linux形成历史开始逐步讲解,让你彻彻底底了解Linux的诞生,之后介绍了Linux相关文化和核心组成结构,以及Linux常用命令和基本用法,课程由浅入深,讲授方法受到98%学员一致好评!

    19317 人正在学习 去看看 马永亮

        链接库一般来在/usr/lib和/lib中,那么如果自己下载了一个很大的库文件,也要全部拷贝的lib路径下么,在windows中,你可以把库的路径添加到PATH中,那么

linux行不行呢?答案是肯定的。

       切换到etc目录下,有个叫ld.so.conf的文件,cat一下,只有一行是include ld.so.conf.d/*.conf,看个意思就是说包含ld.so.conf.d目录下的全部.conf文

件,那好,继续cd到ld.so.conf.d目录下ls看看。

      

     发现还是一些conf文件,再随便找一个cat看看。

      

    里面也只有一行,看上去像个路径,是的,这就是指定了路径。

    由此一来,假如我们想自己指定so链接的路径,那就直接在ld.so.conf.d目录下创建个conf文件,然后写入要指定的路径,就这么简单

2018-08-01 10:04:33 ithaibiantingsong 阅读数 510
  • 马哥Linux教程-Linux操作系统基础由浅入深全面讲解1

    本课程为全新马哥Linux全套系列课程之一--Linux基础入门和架构了解,从Linux起源,Linux架构和Linux形成历史开始逐步讲解,让你彻彻底底了解Linux的诞生,之后介绍了Linux相关文化和核心组成结构,以及Linux常用命令和基本用法,课程由浅入深,讲授方法受到98%学员一致好评!

    19317 人正在学习 去看看 马永亮

Linux共享库路径配置

  Linux下找不到共享库文件的典型现象为明明已经安装某个软包(如libnet,mysql),编译链接可以正常进行,但是在运行时出现如“error while loading shared libraries: libnet.so.1:cannot open shared object file :No such file or directory”的错误提示。

  原因是Linux下的共享库路径配置不正确。默认的linux共享库搜索路径为/lib和/usr/lib两个目录(不包含子目录),若共享库不在这两个路径(最典型的就是/usr/local/lib),不能被自动动态链接到,解决方法有四种

1,链接时使用静态库(.a文件)。在g++命令上写入改.a文件的完整路径。

2,修改LD_LIBRARY_PATH环境变量。(临时有效,且有时候没有效果)

3,将库文件复制到可以搜索到的路径里面,这样比较狠,但是可能导致一些后即问题。

4,添加搜索路径,使用ldconfig命令(下面详细介绍)。

 

添加搜索路径方法步骤:

1,先到官网下载对应的源码版本编译安装软件包(make install)。

2,使用locate命令找到该库的被默认安装的路径,使用方法是先用updatedb更新一下locate命令的索引库,然后“locate libnet.so”查找就可以了,在这里我发现,自动编译安装的库文件被放在了/usr/local/lib目录。

3,修改/etc/ld.so.conf,添加路径。在CentOS 6.3下我看到这个文件实际上是包含了/etc/ld.so.conf.d/这个目录下的所有.conf文件,因此我们可以在这个路径下面创建一个新的文件,其中写上诸如“/usr/local/lib”、“/usr/local/mysql/lib”的路径,保存退出。

4,切记一定要主动执行命令:ldconfig,它会更新记录了系统中有哪些so文件的缓存文件(/etc /ld.so.cache)

ldconfig几个需要注意的地方
1. 往/lib和/usr/lib里面加东西,是不用修改/etc/ld.so.conf的,但是完了之后要调一下ldconfig,不然这个library会找不到
2. 想往上面两个目录以外加东西的时候,一定要修改/etc/ld.so.conf,然后再调用ldconfig,不然也会找不到
比如安装了一个mysql到/usr/local/mysql,mysql有一大堆library在 /usr/local/mysql/lib下面,这时就需要在/etc/ld.so.conf下面加一行/usr/local/mysql/lib,保存 过后ldconfig一下,新的library才能在程序运行时被找到。
3. 如果想在这两个目录以外放lib,但是又不想在/etc/ld.so.conf中加东西(或者是没有权限加东西)。那也可以,就是export一个全局变 量LD_LIBRARY_PATH,然后运行程序的时候就会去这个目录中找library。一般来讲这只是一种临时的解决方案,在没有权限或临时需要的时候使用。
4. ldconfig做的这些东西都与运行程序时有关,跟编译时一点关系都没有。编译的时候还是该加-L就得加,不要混淆了。
5. 总之,就是不管做了什么关于library的变动后,最好都ldconfig一下,不然会出现一些意想不到的结果。不会花太多的时间,但是会省很多的事。

 

本文转载于:https://blog.csdn.net/yanxiangtianji/article/details/8316562

转载请注明出处

没有更多推荐了,返回首页