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++语言开发环境搭建(源码编译安装)
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。