error while loading shared libraries

目录

sudo ln -s用法

报错error while loading shared libraries: libavdevice.so.61:

解决方法:

error while loading shared libraries: ../../lib/libopencv_core.so


sudo ln -s用法

假设你有一个文件 /path/to/original_file 并希望创建一个符号链接 /path/to/link 指向这个文件,你可以使用以下命令:

sudo ln -s /path/to/original_file /path/to/link

报错error while loading shared libraries: libavdevice.so.61:

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

解决方法:

1 find /usr -name 'libavdevice.so*'

2 把真实文件/usr/local/ffmpeg/lib/libavdevice.so.61 创建快捷方式 /usr/lib/libavdevice.so.61

 sudo ln -s /usr/local/ffmpeg/lib/libavdevice.so.61 /usr/lib/libavdevice.so.61

error while loading shared libraries: ../../lib/libopencv_core.so

原文:error while loading shared libraries: ../../lib/libopencv_core.so的解决方法-自由人_SZ-ChinaUnix博客

最近做OpenCV的交叉编译,参考了国内某大大的博客之后,成功编译出动态库文件,但运行时总是报错:
/rom/data/avt/test/cardetect/testso: error while loading shared libraries: ../../lib/libopencv_core.so: cannot open shared object file: No such file or directory
分析认为是运行时libopencv_highgui.so和libopencv_objdetect.so链接../../lib/libopencv_core.so时找不到库文件造成的。问题就出在libopencv_core.so前面奇怪的"../../lib/"相对路径。用readelf -d查看libopencv_highgui.so文件信息:
 

点击(此处)折叠或打开

  1. readelf -d libopencv_highgui.so
  2. Dynamic section at offset 0x50580 contains 30 entries:
  3.   Tag Type Name/Value
  4.  0x00000001 (NEEDED) Shared library: [../../lib/libopencv_core.so]
  5.  0x00000001 (NEEDED) Shared library: [../../lib/libopencv_imgproc.so]
  6.  0x00000001 (NEEDED) Shared library: [libstdc++.so.6]
  7.  0x00000001 (NEEDED) Shared library: [libm.so.6]
  8.  0x00000001 (NEEDED) Shared library: [libgcc_s.so.1]
  9.  0x00000001 (NEEDED) Shared library: [libc.so.6]
  10.  0x0000000c (INIT) 0xa410
  11.  0x0000000d (FINI) 0x49ed4
  12.  0x00000019 (INIT_ARRAY) 0x50000
  13.  0x0000001b (INIT_ARRAYSZ) 12 (bytes)
  14.  0x0000001a (FINI_ARRAY) 0x5000c
  15. ......

果然libopencv_highgui.so链接core库的时候把../../lib也加上去了。
我研究了半天也没找到这个路径是在哪里可以设置的,突然想到,google上国外友人似乎很少遇到这个问题。于是按照这篇文章又重编了opencv:
http://processors.wiki.ti.com/index.php/Building_OpenCV_for_ARM_Cortex-A8
其中编译过程中需要在toolchain.cmake中增加一项配置:
 

点击(此处)折叠或打开

  1. set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER )


否则cmake会从root path中寻找make和gcc\g++使用,这会产生类似expect ")"的错误信息。
之后按照步骤编译出动态库,再用readelf查看一下:
 

点击(此处)折叠或打开

  1. readelf -d libopencv_objdetect.so
  2. Dynamic section at offset 0x107628 contains 35 entries:
  3.   Tag Type Name/Value
  4.  0x00000001 (NEEDED) Shared library: [libopencv_core.so.2.4]
  5.  0x00000001 (NEEDED) Shared library: [libopencv_imgproc.so.2.4]
  6.  0x00000001 (NEEDED) Shared library: [libopencv_highgui.so.2.4]
  7.  0x00000001 (NEEDED) Shared library: [libdl.so.2]
  8.  0x00000001 (NEEDED) Shared library: [libpthread.so.0]
  9.  0x00000001 (NEEDED) Shared library: [librt.so.1]
  10.  0x00000001 (NEEDED) Shared library: [libstdc++.so.6]
  11. .........

这样放到arm下面运行,就会从当前目录下正确的找到core库了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI算法网奇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值