问题:编译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
这个命令常用来打印或者查看程序运行所需的共享库(访问共享对象依赖关系),可以解决程序因缺少某个库文件而不能运行的一些问题。文章来源:https://www.toymoban.com/news/detail-767382.html
参考:【已解决】/lib/x86_64-linux-gnu/libapr-1.so.0: undefined reference to `uuid_generate@UUID_1.0`文章来源地址https://www.toymoban.com/news/detail-767382.html
到了这里,关于【已解决】Ubuntu 20.04 编译OpenCV 动态链接库指向版本不一致导致出错的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!