当前位置: 代码网 > 服务器>服务器>Linux > 【已解决】Ubuntu 20.04 编译OpenCV 动态链接库指向版本不一致导致出错

【已解决】Ubuntu 20.04 编译OpenCV 动态链接库指向版本不一致导致出错

2024年07月28日 Linux 我要评论
之后locate这个文件,发现除了/usr/lib/x86_64-linux-gnu之外,我的Anaconda安装目录/lib下面也有一个libffi.so.7。make[2]: *** [apps/annotation/CMakeFiles/opencv_annotation.dir/build.make:104:bin/opencv_annotation] 错误 1。然后用内置命令ldd查看出现问题的libwayland-client.so.0当中,所依赖的ffi这个库的叫什么。,可以避免一些Bug。

问题:编译opencv 4.8.1, 显示出错:

/usr/bin/ld: /lib/x86_64-linux-gnu/libwayland-client.so.0: undefined reference to `ffi_type_uint32@libffi_base_7.0'
/usr/bin/ld: /lib/x86_64-linux-gnu/libwayland-client.so.0: undefined reference to `ffi_type_sint32@libffi_base_7.0'
/usr/bin/ld: /lib/x86_64-linux-gnu/libwayland-client.so.0: undefined reference to `ffi_type_pointer@libffi_base_7.0'
/usr/bin/ld: /lib/x86_64-linux-gnu/libwayland-client.so.0: undefined reference to `ffi_type_void@libffi_base_7.0'
/usr/bin/ld: /lib/x86_64-linux-gnu/libwayland-client.so.0: undefined reference to `ffi_prep_cif@libffi_base_7.0'
/usr/bin/ld: /lib/x86_64-linux-gnu/libwayland-client.so.0: undefined reference to `ffi_call@libffi_base_7.0'
collect2: error: ld returned 1 exit status
make[2]: *** [apps/annotation/cmakefiles/opencv_annotation.dir/build.make:104:bin/opencv_annotation] 错误 1
make[1]: *** [cmakefiles/makefile2:3208:apps/annotation/cmakefiles/opencv_annotation.dir/all] 错误 2
make[1]: *** 正在等待未完成的任务....

问题分析:系统的动态链接库和anaconda的动态链接库指向的版本不同,因此编译出错。

解决方法:先下载一个工具包locate。比find好用。

$ sudo apt install locate
$ sudo updatedb

然后用内置命令ldd查看出现问题的libwayland-client.so.0当中,所依赖的ffi这个库的叫什么。

$ ldd /lib/x86_64-linux-gnu/libwayland-client.so.0 | grep ffi

我们可以发现依赖的这个库叫做libffi.so.7。

之后locate这个文件,发现除了/usr/lib/x86_64-linux-gnu之外,我的anaconda安装目录/lib下面也有一个libffi.so.7。输入以下命令分别查看两个libffi.so.7链接的动态库文件:

# 查看系统的libffi
$ ll /lib/x86_64-linux-gnu/ | grep ffi
# 查看anaconda的libffi
$ ll ~/anaconda3/lib/ | grep ffi

结果显示系统的libffi.so.7指向了7.1.0版本,而anaconda下的指向了8.1.2版本。

因此,把anaconda下的libffi.so.7指向系统的7.1.0就可以了。

$ cd (你的anaconda安装目录)/lib
$ sudo rm libffi.so.7
$ sudo ln -s /lib/x86_64-linux-gnu/libffi.so.7.1.0 libffi.so.7

再次查看anaconda下的ffi,发现libffi.so.7已经指向了lib/x86_64-linux-gnu/libffi.so.7.1.0。

再次编译opencv,通过。

总结:当编译程序的时候,如果安装了anaconda,经常会出现动态链接库的依赖指向问题。保证系统和anaconda的依赖库版本一致,可以避免一些bug。

ldd这个命令常用来打印或者查看程序运行所需的共享库(访问共享对象依赖关系),可以解决程序因缺少某个库文件而不能运行的一些问题。

参考:【已解决】/lib/x86_64-linux-gnu/libapr-1.so.0: undefined reference to `uuid_generate@uuid_1.0`

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com