Linux 下 Opencv 的配置与安装

_NachoNeko_ 2024-10-02 15:07:03 阅读 95

1. 下载

在 Opencv官网 下载合适的 Opencv 版本的 <code>tar.gz 压缩包并解压。

这里下载的是 4.9.0 版本。

在这里插入图片描述

2. 编译

打开终端,安装 Opencv 编译所需要的环境,命令如下:

<code>sudo apt-get install build-essential libgtk2.0-dev libgtk-3-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev libtiff5-dev

在解压后的文件夹下,新建一个 build 文件夹。

在这里插入图片描述

进入到 <code>build 文件夹下,打开终端,使用cmake命令生成项目文件,输入以下命令:

cmake ../ -D BUILD_opencv_world=ON -D OPENCV_GENERATE_PKGCONFIG=YES

出现如下界面则说明生成项目文件成功:

在这里插入图片描述

在当前路径下,使用 <code>make 编译:

编译完后,出现以下界面则说明编译成功:

在这里插入图片描述

环境配置

配置动态链接库加载路径

使用 <code>vi /etc/ld.so.conf 命令打开配置文件,加上 Opencv 动态链接库的路径:

include /usr/local/lib

如果提示只读无法更改,先用 sudo chmod 777 /etc/ld.so.conf 增加写入权限。

环境变量配置

使用 vi /etc/bash.bashrc 打开配置文件,加上环境变量 PKG_CONFIG_PATH 的配置。

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig

export PKG_CONFIG_PATH

测试

输入:

pkg-config --cflags --libs opencv4

若能正确输出路径则环境配置成功。

按照如下命令进行:

cd opencv目录/samples/cpp/

g++ `pkg-config --cflags opencv4` drawing.cpp `pkg-config --libs opencv4` -o drawing.out

./drawing.out

遇到的问题

undefined reference to `ffi_type_uint32@LIBFFI_BASE_7.0’

参考文档:https://blog.csdn.net/qq_19278525/article/details/134039141?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-134039141-blog-135100639.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-134039141-blog-135100639.235%5Ev43%5Epc_blog_bottom_relevance_base4&utm_relevant_index=1

在编译 Opencv 时出现如下报错:

/usr/bin/ld: /lib/x86_64-linux-gnu/libgobject-2.0.so.0: undefined reference to `ffi_type_uint32@LIBFFI_BASE_7.0'

/usr/bin/ld: /lib/x86_64-linux-gnu/libgobject-2.0.so.0: undefined reference to `ffi_type_sint32@LIBFFI_BASE_7.0'

/usr/bin/ld: /lib/x86_64-linux-gnu/libgobject-2.0.so.0: undefined reference to `ffi_type_float@LIBFFI_BASE_7.0'

/usr/bin/ld: /lib/x86_64-linux-gnu/libgobject-2.0.so.0: undefined reference to `ffi_type_pointer@LIBFFI_BASE_7.0'

/usr/bin/ld: /lib/x86_64-linux-gnu/libgobject-2.0.so.0: undefined reference to `ffi_type_uint64@LIBFFI_BASE_7.0'

/usr/bin/ld: /lib/x86_64-linux-gnu/libgobject-2.0.so.0: undefined reference to `ffi_type_void@LIBFFI_BASE_7.0'

/usr/bin/ld: /lib/x86_64-linux-gnu/libgobject-2.0.so.0: undefined reference to `ffi_type_double@LIBFFI_BASE_7.0'

/usr/bin/ld: /lib/x86_64-linux-gnu/libgobject-2.0.so.0: undefined reference to `ffi_type_sint64@LIBFFI_BASE_7.0'

/usr/bin/ld: /lib/x86_64-linux-gnu/libgobject-2.0.so.0: undefined reference to `ffi_prep_cif@LIBFFI_BASE_7.0'

/usr/bin/ld: /lib/x86_64-linux-gnu/libgobject-2.0.so.0: undefined reference to `ffi_call@LIBFFI_BASE_7.0'

collect2: error: ld returned 1 exit status

make[2]: *** [modules/world/CMakeFiles/opencv_test_imgcodecs.dir/build.make:225:bin/opencv_test_imgcodecs] 错误 1

make[1]: *** [CMakeFiles/Makefile2:1537:modules/world/CMakeFiles/opencv_test_imgcodecs.dir/all] 错误 2

make: *** [Makefile:182:all] 错误 2

使用内置命令 ldd 查看出现问题的 libwayland-client.so.0 所依赖的链接位置:

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

结果如下:

在这里插入图片描述

可以发现该库被错误的链接到了 <code>anaconda 内的 libffi,而不是系统内的。

使用命令查看 anaconda系统libffi 分别在哪里:

然后输入命令,修改链接位置:

cd (你的Anaconda安装目录)/lib

sudo rm libffi.so.7

sudo ln -snf /usr/lib/x86_64-linux-gnu/libffi.so.7.1.0 libffi.so.7

使用命令查看:

ll ~/anaconda3/lib/ | grep ffi

发现位置已经改为系统的路径:

在这里插入图片描述

libstdc++.so.6: version ‘GLIBCXX_3.4.30‘ not found

输入命令:

<code>strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX

结果如下:

在这里插入图片描述

证明系统中是存在 3.4.30 的,只是没有添加进去。

删除报错的文件,这里提示是在 <code>/home/l2080/anaconda3/envs/openvino_env/lib/libstdc++.so.6 错误,请根据自己的路径自行修改:

sudo rm /home/l2080/anaconda3/envs/openvino_env/lib/libstdc++.so.6

将系统的文件复制到出错的文件夹内:

sudo cp /usr/lib/x86_64-linux-gnu/libstdc++.so.6 /home/l2080/anaconda3/envs/openvino_env/lib/libstdc++.so.6

创建链接:

sudo ln -sf /usr/lib/x86_64-linux-gnu/libstdc++.so.6 /home/l2080/anaconda3/envs/openvino_env/lib/libstdc++.so.6

查看结果:

strings /home/l2080/anaconda3/envs/openvino_env/lib/libstdc++.so.6 | grep GLIBCXX

结果如下,3.4.30 成功链接:

在这里插入图片描述

参考文章

解决 libstdc++.so.6: version ‘GLIBCXX_3.4.30‘ not found 问题案例2:Linux OpenCV C++语言开发环境搭建(源码编译安装)



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。