2014-01-22 14:41:50 seucbh 阅读数 557
  • 玩转Linux:常用命令实例指南

    本课程以简洁易懂的语言手把手教你系统掌握日常所需的Linux知识,每个知识点都会配合案例实战让你融汇贯通 。课程通俗易懂,简洁流畅,适合0基础以及对Linux掌握不熟练的人学习; 注意: 1、本课程原价99元,现在仅需29元!购课就送5门价值300元的编程课! 2、购课后登陆csdn学院官网,在课程目录页面即可下载课件。 学完即可轻松应对工作中 85% 以上的 Linux 使用场景 【限时福利】 1)购课后按提示添加小助手,进答疑群,还可获得价值300元的编程大礼包! 2)本课程【现在享受秒杀价39元】 3)本月购买此套餐加入老师答疑交流群,可参加老师的免费分享活动,学习最新技术项目经验。 注意: 1)现在购买至少享受60元优惠; 2)购课后添加微信eduxy-1,发送订单截图领取300元编程礼包。 --------------------------------------------------------------- 这门课程,绝对不会让你觉得亏! 29元=掌握Linux必修知识+社群答疑+讲师社群分享会+300元编程礼包。   人工智能、物联网、大数据时代,Linux正有着一统天下的趋势,几乎每个程序员岗位,都要求掌握Linux。本课程零基础也能轻松入门。   在这门课中,我们保证你能收获到这些 1)快速掌握 Linux 常用命令及配置 2)Linux核心知识点 3) 文件、进程、磁盘、用户管理,以及网络工具命令、文件传输等 4)Vi/Vim编辑器用法  

    7036 人正在学习 去看看 良许

1.符号连接方式

用ln将需要的so文件链接到/usr/lib或者/lib这两个默认的目录下边。

ln -s /where/you/install/lib/*.so /usr/lib

ldconfig

 

2.修改/etc/ld.so.conf 文件

vim /etc/ld.so.conf

/usr/local/bin   #在文件最底下添加自己的动态库的路径。
ldconfig

2018-04-02 16:42:43 wudi_X 阅读数 1907
  • 玩转Linux:常用命令实例指南

    本课程以简洁易懂的语言手把手教你系统掌握日常所需的Linux知识,每个知识点都会配合案例实战让你融汇贯通 。课程通俗易懂,简洁流畅,适合0基础以及对Linux掌握不熟练的人学习; 注意: 1、本课程原价99元,现在仅需29元!购课就送5门价值300元的编程课! 2、购课后登陆csdn学院官网,在课程目录页面即可下载课件。 学完即可轻松应对工作中 85% 以上的 Linux 使用场景 【限时福利】 1)购课后按提示添加小助手,进答疑群,还可获得价值300元的编程大礼包! 2)本课程【现在享受秒杀价39元】 3)本月购买此套餐加入老师答疑交流群,可参加老师的免费分享活动,学习最新技术项目经验。 注意: 1)现在购买至少享受60元优惠; 2)购课后添加微信eduxy-1,发送订单截图领取300元编程礼包。 --------------------------------------------------------------- 这门课程,绝对不会让你觉得亏! 29元=掌握Linux必修知识+社群答疑+讲师社群分享会+300元编程礼包。   人工智能、物联网、大数据时代,Linux正有着一统天下的趋势,几乎每个程序员岗位,都要求掌握Linux。本课程零基础也能轻松入门。   在这门课中,我们保证你能收获到这些 1)快速掌握 Linux 常用命令及配置 2)Linux核心知识点 3) 文件、进程、磁盘、用户管理,以及网络工具命令、文件传输等 4)Vi/Vim编辑器用法  

    7036 人正在学习 去看看 良许

在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自行编译。
(先写到这里吧,后续有再补充…)

2013-08-18 11:00:49 gotowqj 阅读数 150
  • 玩转Linux:常用命令实例指南

    本课程以简洁易懂的语言手把手教你系统掌握日常所需的Linux知识,每个知识点都会配合案例实战让你融汇贯通 。课程通俗易懂,简洁流畅,适合0基础以及对Linux掌握不熟练的人学习; 注意: 1、本课程原价99元,现在仅需29元!购课就送5门价值300元的编程课! 2、购课后登陆csdn学院官网,在课程目录页面即可下载课件。 学完即可轻松应对工作中 85% 以上的 Linux 使用场景 【限时福利】 1)购课后按提示添加小助手,进答疑群,还可获得价值300元的编程大礼包! 2)本课程【现在享受秒杀价39元】 3)本月购买此套餐加入老师答疑交流群,可参加老师的免费分享活动,学习最新技术项目经验。 注意: 1)现在购买至少享受60元优惠; 2)购课后添加微信eduxy-1,发送订单截图领取300元编程礼包。 --------------------------------------------------------------- 这门课程,绝对不会让你觉得亏! 29元=掌握Linux必修知识+社群答疑+讲师社群分享会+300元编程礼包。   人工智能、物联网、大数据时代,Linux正有着一统天下的趋势,几乎每个程序员岗位,都要求掌握Linux。本课程零基础也能轻松入门。   在这门课中,我们保证你能收获到这些 1)快速掌握 Linux 常用命令及配置 2)Linux核心知识点 3) 文件、进程、磁盘、用户管理,以及网络工具命令、文件传输等 4)Vi/Vim编辑器用法  

    7036 人正在学习 去看看 良许
 对动态库的实际应用还不太熟悉的读者可能曾经遇到过类似“error while loading shared libraries”这样的错误,这是典型的因为需要的动态库不在动态链接器ld.so的搜索路径设置当中导致的。 
        具体说来,动态链接器ld.so按照下面的顺序来搜索需要的动态共享库: 
1.ELF可执行文件中动态段中DT_RPATH所指定的路径。这实际上是通过一种不算很常用,却比较实用的方法所设置的:编译目标代码时,可以对gcc加入链接参数“-Wl,-rpath”指定动态库搜索路径; 
2.环境变量LD_LIBRARY_PATH指定的动态库搜索路径; 
3./etc/ld.so.cache中所缓存的动态库路径(如果支持ld.so.cache的话)。这可以通过修改配置文件/etc/ld.so.conf中指定的动态库搜索路径来改变; 
4.默认的动态库搜索路径/lib; 
5.默认的动态库搜索路径/usr/lib。 
        在嵌入式Linux系统的实际应用中,1和2被经常使用,也有一些相对简单的的嵌入式系统会采用4或5的路径来规范动态库。3在嵌入式系统中使用的比较少,因为有很多系统根本就不支持ld.so.cache。 
       4和5的方式非常简单,只要将所需要的库放到/lib或/usr/lib就可以解决找不到库的问题,不过对于大一些的系统来说,不太方便管理。1和2的方式要稍微复杂一些,下面我们用一个非常简单的例子来说明如何应用。 
        首先编写一个最简单的动态共享库,源代码pirnt.c如下: 
 1 #include <stdio.h> 

3 void print_foo() 
4 { 
5 printf("fooooooooo\n"); 
6 }
注意将它编译成共享库:
 # gcc print.c -shared -o libprint.so 
# file libprint.so 
libprint.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), not stripped

调用该共享库main.c代码如下:
 1 #include <stdio.h> 

3 extern void print_foo(); 

5 int main() 
6 { 
7 print_foo(); 

9 return 0; 
10 }

编译之后的运行结果如下:
 # gcc main.c -L./ -lprint -o pfoo 
# ./pfoo 
./pfoo: error while loading shared libraries: libprint.so: cannot open shared object file: No such file or directory

这便是典型的找不到动态库的错误。通常我们可以通过设置环境变量LD_LIBRARY_PATH来指定动态库的搜索路径(即上面的方法2),比如这样就可以正确运行了:
 # export LD_LIBRARY_PATH=./ 
# ./pfoo 
fooooooooo

        但这种方法有一个明显的缺点:一旦LD_LIBRARY_PATH被设定,则在这个环境变量生效的范围之内,所有其他的ELF可执行程序也会按照这个顺序去搜索动态库,这样势必会造成搜索时的一些浪费。 
        我们也可以使用另外一种方案来解决这种问题,即利用参数“-Wl,-rpath”在编译时指定运行时的搜索路径(即上面的方法1),如下所示: 
 # unset LD_LIBRARY_PATH 
# echo $LD_LIBRARY_PATH 
# gcc main.c -L./ -lprint -o pfoo_r -Wl,-rpath=./ 
# ./pfoo 
./pfoo: error while loading shared libraries: libprint.so: cannot open shared object file: No such file or directory 
# ./pfoo_r 
fooooooooo

我们首先unset了LD_LIBRARY_PATH,可以看到它已经不再有效了(当然这不是使用参数“-Wl,-rpath”的必要步骤,在这里只是为了说明它已经不再起作用了),而且”pfoo”程序运行时也会发生找不到库的错误,而我们加入编译参数“-Wl,-rpath,./”之后得到的pfoo_r程序则能正常运行。 
事实上我们可以通过readelf工具来查看两个文件的差异: 
 # readelf -d pfoo 

Dynamic segment at offset 0x514 contains 21 entries: 
Tag Type Name/Value 
0x00000001 (NEEDED) Shared library: [libprint.so] 
0x00000001 (NEEDED) Shared library: [libc.so.6] 
0x0000000c (INIT) 0x8048344 
0x0000000d (FINI) 0x80484e0 
0x00000004 (HASH) 0x8048128 
0x00000005 (STRTAB) 0x8048240 
0x00000006 (SYMTAB) 0x8048170 
0x0000000a (STRSZ) 178 (bytes) 
0x0000000b (SYMENT) 16 (bytes) 
0x00000015 (DEBUG) 0x0 
0x00000003 (PLTGOT) 0x80495f8 
0x00000002 (PLTRELSZ) 16 (bytes) 
0x00000014 (PLTREL) REL 
0x00000017 (JMPREL) 0x8048334 
0x00000011 (REL) 0x804832c 
0x00000012 (RELSZ) 8 (bytes) 
0x00000013 (RELENT) 8 (bytes) 
0x6ffffffe (VERNEED) 0x804830c 
0x6fffffff (VERNEEDNUM) 1 
0x6ffffff0 (VERSYM) 0x80482f2 
0x00000000 (NULL) 0x0 
[root@localhost ldpath]# readelf -d pfoo_r 
Dynamic segment at offset 0x518 contains 22 entries: 
Tag Type Name/Value 
0x00000001 (NEEDED) Shared library: [libprint.so] 
0x00000001 (NEEDED) Shared library: [libc.so.6] 
0x0000000f (RPATH) Library rpath: [./] 
0x0000000c (INIT) 0x8048348 
0x0000000d (FINI) 0x80484e4 
0x00000004 (HASH) 0x8048128 
0x00000005 (STRTAB) 0x8048240 
0x00000006 (SYMTAB) 0x8048170 
0x0000000a (STRSZ) 181 (bytes) 
0x0000000b (SYMENT) 16 (bytes) 
0x00000015 (DEBUG) 0x0 
0x00000003 (PLTGOT) 0x8049604 
0x00000002 (PLTRELSZ) 16 (bytes) 
0x00000014 (PLTREL) REL 
0x00000017 (JMPREL) 0x8048338 
0x00000011 (REL) 0x8048330 
0x00000012 (RELSZ) 8 (bytes) 
0x00000013 (RELENT) 8 (bytes) 
0x6ffffffe (VERNEED) 0x8048310 
0x6fffffff (VERNEEDNUM) 1 
0x6ffffff0 (VERSYM) 0x80482f6 
0x00000000 (NULL) 0x0

“readelf -d”可以用来查看ELF文件的动态节(Dynamic Section)。对比pfoo 和pfoo_r的结果我们可以发现,pfoo_r中多出来了RPATH项,指定”Library rpath: [./]”。通过这种方式,我们可以用非常小的代价(仅增加几乎可以忽略的空间开销),对每个ELF文件都指定最优化的搜索路径,达到提升性能的目的。这是我们比较推荐的一种方法。当然了,具体如果操作依赖于具体的软件系统的情况,简单的系统中直接将所有的库都放到/lib下也未尝不是一种简单易行的优化方案。
相关链接

   
2014-04-29 17:44:17 redouba 阅读数 572
  • 玩转Linux:常用命令实例指南

    本课程以简洁易懂的语言手把手教你系统掌握日常所需的Linux知识,每个知识点都会配合案例实战让你融汇贯通 。课程通俗易懂,简洁流畅,适合0基础以及对Linux掌握不熟练的人学习; 注意: 1、本课程原价99元,现在仅需29元!购课就送5门价值300元的编程课! 2、购课后登陆csdn学院官网,在课程目录页面即可下载课件。 学完即可轻松应对工作中 85% 以上的 Linux 使用场景 【限时福利】 1)购课后按提示添加小助手,进答疑群,还可获得价值300元的编程大礼包! 2)本课程【现在享受秒杀价39元】 3)本月购买此套餐加入老师答疑交流群,可参加老师的免费分享活动,学习最新技术项目经验。 注意: 1)现在购买至少享受60元优惠; 2)购课后添加微信eduxy-1,发送订单截图领取300元编程礼包。 --------------------------------------------------------------- 这门课程,绝对不会让你觉得亏! 29元=掌握Linux必修知识+社群答疑+讲师社群分享会+300元编程礼包。   人工智能、物联网、大数据时代,Linux正有着一统天下的趋势,几乎每个程序员岗位,都要求掌握Linux。本课程零基础也能轻松入门。   在这门课中,我们保证你能收获到这些 1)快速掌握 Linux 常用命令及配置 2)Linux核心知识点 3) 文件、进程、磁盘、用户管理,以及网络工具命令、文件传输等 4)Vi/Vim编辑器用法  

    7036 人正在学习 去看看 良许
1. 连接和运行时库文件搜索路径到设置

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

    (1). 在 /etc/ld.so.conf 文件中添加库的搜索路径。(或者在/etc/ld.so.conf.d 下新建一个.conf文件,将搜索路径一行一个加入-junziyang)

        将自己可能存放库文件的路径都加入到/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 设置的路径将被优先搜索,所以在连接的时候通常都会以这种方式直接指定要连接的库的路径。 

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

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

        设置方式:

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

        可以用下面的命令查看 LD_LIBRAY_PATH 的设置内容:

            echo $LD_LIBRARY_PATH

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

2.交叉编译时候如何配置连接库的搜索路径

        交叉编译的时候不能使用本地(i686机器,即PC机器,研发机器)机器上的库,但是在做编译链接的时候默认的是使用本地库,即/usr/lib, /lib两个目录。因此,在交叉编译的时候,要采取一些方法使得在编译链接的时候找到需要的库。

        首先,要知道:编译的时候只需要头文档,真正实际的库文档在链接的时候用到。 (这是我的理解,假如有不对的地方,敬请网上各位大侠指教) 然后,讲讲如何在交叉编译链接的时候找到需要的库。

    (1)交叉编译时候直接使用-L和-I参数指定搜索非标准的库文档和头文档的路径。例如:

        arm-linux-gcc test.c -L/usr/local/arm/2.95.3/arm-linux/lib -I/usr/local/arm/2.95.3/arm-linux/include 

    (2)使用ld.so.conf文档,将用到的库所在文档目录添加到此文档中,然后使用ldconfig命令刷新缓存。

    (3)使用如下命令:

        export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/arm/2.95.3/arm-linux-lib

        参见《ld.so.conf 文档和PKG_CONFIG_PATH变量》这篇文章。

        通过环境变量LD_LIBRARY_PATH指定动态库搜索路径(!)。

        通过设定环境变量LD_LIBRARY_PATH也可以指定动态库搜索路径。当通过该环境变量指定多个动态库搜索路径时,路径之间用冒号":"分隔。

        不过LD_LIBRARY_PATH的设定作用是全局的,过多的使用可能会影响到其他应用程序的运行,所以多用在调试。(LD_LIBRARY_PATH 的缺陷和使用准则,可以参考《Why LD_LIBRARY_PATH is bad》 )。通常情况下推荐还是使用gcc的-R或-rpath选项来在编译时就指定库的查找路径,并且该库的路径信息保存在可执行文件中,运行时它会直接到该路径查找库,避免了使用LD_LIBRARY_PATH环境变量查找。

    (4)交叉编译时使用软件的configure参数。例如我编译minigui-1.3.3,使用如下配置:

        #!/bin/bash

        rm -f config.cache config.status

        ./configure --build=i686-linux --host=arm-linux --target=arm-linux /

        CFLAGS=-I/usr/local/arm/2.95.3/arm-linux/include /

        LDFLAGS=-L/usr/local/arm/2.95.3/arm-linux/lib /

        --prefix=/usr/local/arm/2.95.3/arm-linux /

        --enable-lite /

        --disable-galqvfb /

        --disable-qvfbial /

        --disable-vbfsupport /

        --disable-ttfsupport /

        --disable-type1support /

        --disable-imegb2312py /

        --enable-extfullgif /

        --enable-extskin /

        --disable-videoqvfb /

        --disable-videoecoslcd

        这里我配置了CFLAGS和LDFLAGS参数,这样一来,我就不用去修改每个Makefile里-L和-I参数了,也不用再去配置 LD_LIBRARY_PATH或改写ld.so.conf文档了。


Linux下动态库使用小结

1. 静态库和动态库的基本概念
        静态库,是在可执行程序连接时就已经加入到执行码中,在物理上成为执行程序的一部分;使用静态库编译的程序运行时无需该库文件支持,哪里都可以用,但是生成的可执行文件较大。动态库,是在可执行程序启动时加载到执行程序中,可以被多个可执行程序共享使用。使用动态库编译生成的程序相对较小,但运行时需要库文件支持,如果机器里没有这些库文件就不能运行。

2. 如何使用动态库
        如何程序在连接时使用了共享库,就必须在运行的时候能够找到共享库的位置。linux的可执行程序在执行的时候默认是先搜索/lib和/usr/lib这两个目录,然后按照/etc/ld.so.conf里面的配置搜索绝对路径。同时,Linux也提供了环境变量LD_LIBRARY_PATH供用户选择使用,用户可以通过设定它来查找除默认路径之外的其他路径,如查找/work/lib路径,你可以在/etc/rc.d/rc.local或其他系统启动后即可执行到的脚本添加如下语句:LD_LIBRARY_PATH =/work/lib:$(LD_LIBRARY_PATH)。并且LD_LIBRARY_PATH路径优先于系统默认路径之前查找(详细参考《使用 LD_LIBRARY_PATH》)。

        不过LD_LIBRARY_PATH的设定作用是全局的,过多的使用可能会影响到其他应用程序的运行,所以多用在调试。(LD_LIBRARY_PATH 的缺陷和使用准则,可以参考《Why LD_LIBRARY_PATH is bad》)。通常情况下推荐还是使用gcc的-R或-rpath选项来在编译时就指定库的查找路径,并且该库的路径信息保存在可执行文件中,运行时它会直接到该路径查找库,避免了使用LD_LIBRARY_PATH环境变量查找。

3.库的链接时路径和运行时路径
        现代连接器在处理动态库时将链接时路径(Link-time path)和运行时路径(Run-time path)分开,用户可以通过-L指定连接时库的路径,通过-R(或-rpath)指定程序运行时库的路径,大大提高了库应用的灵活性。比如我们做嵌入式移植时#arm-linux-gcc $(CFLAGS) –o target –L/work/lib/zlib/ -llibz-1.2.3 (work/lib/zlib下是交叉编译好的zlib库),将target编译好后我们只要把zlib库拷贝到开发板的系统默认路径下即可。或者通过- rpath(或-R )、LD_LIBRARY_PATH指定查找路径。
2014-10-10 13:17:05 roberts_tsang 阅读数 325
  • 玩转Linux:常用命令实例指南

    本课程以简洁易懂的语言手把手教你系统掌握日常所需的Linux知识,每个知识点都会配合案例实战让你融汇贯通 。课程通俗易懂,简洁流畅,适合0基础以及对Linux掌握不熟练的人学习; 注意: 1、本课程原价99元,现在仅需29元!购课就送5门价值300元的编程课! 2、购课后登陆csdn学院官网,在课程目录页面即可下载课件。 学完即可轻松应对工作中 85% 以上的 Linux 使用场景 【限时福利】 1)购课后按提示添加小助手,进答疑群,还可获得价值300元的编程大礼包! 2)本课程【现在享受秒杀价39元】 3)本月购买此套餐加入老师答疑交流群,可参加老师的免费分享活动,学习最新技术项目经验。 注意: 1)现在购买至少享受60元优惠; 2)购课后添加微信eduxy-1,发送订单截图领取300元编程礼包。 --------------------------------------------------------------- 这门课程,绝对不会让你觉得亏! 29元=掌握Linux必修知识+社群答疑+讲师社群分享会+300元编程礼包。   人工智能、物联网、大数据时代,Linux正有着一统天下的趋势,几乎每个程序员岗位,都要求掌握Linux。本课程零基础也能轻松入门。   在这门课中,我们保证你能收获到这些 1)快速掌握 Linux 常用命令及配置 2)Linux核心知识点 3) 文件、进程、磁盘、用户管理,以及网络工具命令、文件传输等 4)Vi/Vim编辑器用法  

    7036 人正在学习 去看看 良许

在开发板上安装了opencv后运行应用程序时,出现

error while loading shared libraries:libopencv_highgui.so.2.3:cannot open shared object file:No such file or directory

在linux系统中,一般安装的软件共享链接库都是装在/usr/local/lib中,而在系统查找时一般是扫描/usr/lib  /lib,

这时 可以做一个符号链接指向/usr/local/lib对应的链接库,如在安装流媒体库时,可

sudo ln -s/usr/local/lib/libjrtp.so.3.9.1 /usr/lib

然后:

                   

***@***-desktop:/usr/lib$file libjrtp.so.3.9.1

terminal显示:          

  libjrtp.so.3.9.1: symboliclink to `/usr/local/lib/libjrtp.so.3.9.1'

同理,对include头文件,默认是在/usr/include中查找,通过如下命令:

                                       sudo ln -s/usr/local/include/jrtplib3/ /usr/include/jrtlib

linux下配置库路径

阅读数 326

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