0


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

问题:编译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

标签: ubuntu linux 运维

本文转载自: https://blog.csdn.net/qq_19278525/article/details/134039141
版权归原作者 GYGYGYGYGYYY 所有, 如有侵权,请联系我们删除。

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

还没有评论