ubuntu安装opencv c++ 版,配置使用clion开发,以及一些可能存在的坑解决方案

这里写自定义目录标题

  • 零、碎碎念(
  • 一、下载
  • 二、 安装
        • 安装cmake
        • 安装依赖库
        • 解压并创建build目录
        • 执行cmake
        • 编译与安装
  • 三、环境配置
        • 1. 将库添加到系统路径
        • 2. 配置系统bash
  • 四、测试
    • 可能遇到的问题
        • 问题一,找不到opencv2文件夹
        • 问题二,clion运行提示undefined reference to `cv::imread(std::__cxx11::basic_string

零、碎碎念(

安装这个opencv c++版是遇到了各种各样奇怪的坑
编译过程超级长,第一次编译的时候看的很心慌,还好没有遇到编译问题,比较顺利
但是初次使用过程中,各种奇怪的坑就出现了,
仅仅是最简单的读取一张图片,显示出来,就有各种各样奇怪的问题

一、下载

打开这个链接
https://opencv.org/releases
选择最新版,或者根据需要选择版本,点击sources进行下载,如果你下载的比较慢的话,可以使用以下链接进行下载(打不开的话,可以把lanzouw改成lanzoux)
https://lyyqaq.lanzouw.com/ihwWA00tttgj

二、 安装

安装cmake

首先,需要cmake以及make

sudo apt install cmake make

安装依赖库

建议直接复制

sudo apt-get install build-essential pkg-config libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev libtiff5-dev

解压并创建build目录

unzip opencv-4.5.5.zip
cd opencv-4.5.5
mkdir build
cd build

执行cmake

下面这行一定要全部复制

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_GTK=ON -D OPENCV_GENERATE_PKGCONFIG=YES ..

CMAKE_BUILD_TYPE=RELEASE:表示编译发布版本
CMAKE_INSTALL_PREFIX:表示生成动态库的安装路径,可以自定义
WITH_GTK=ON:这个配置是为了防止GTK配置失败:即安装了libgtk2.0-dev依赖,还是报错未安装
OPENCV_GENERATE_PKGCONFIG=YES:表示自动生成OpenCV的pkgconfig文件,否则需要自己手动生成。

编译与安装

make -j4

数字4是表示用4个系统内核编译,根据配置不同,可能要等待十几分钟到半小时

sudo make install

三、环境配置

1. 将库添加到系统路径

sudo vim /etc/ld.so.conf

在打开的文件末尾,增加一行include /usr/loacal/lib

最后

sudo ldconfig

即可

注意,针对使用WSL构建,到这一步时,会报错
/sbin/ldconfig.real: /usr/lib/wsl/lib/libcuda.so.1 is not a symbolic link

解决办法见问题四

2. 配置系统bash

sudo vim /etc/bash.bashrc

在末尾添加下面两行

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

保存退出,再source一下

source /etc/bash.bashrc

四、测试

打开clion创建一个工程,将opencv页面的图标保存下来,放到工程目录下

#include 
#include 

using namespace std;
using namespace cv;

int main() {
    Mat img = imread("../opencv.png");
    imshow("Image", img);
    waitKey(0);
    return 0;
}

可能遇到的问题

问题一,找不到opencv2文件夹

点开外部库的include文件夹,可以看到opencv4文件夹,并且opencv2文件夹在opencv4下面
ubuntu安装opencv c++ 版,配置使用clion开发,以及一些可能存在的坑解决方案_第1张图片
此时可以给opencv2文件夹手动创建一个软链接

cd /usr/local/include/
sudo ln -s opencv4/opencv2 opencv2

重新回到clion,可以看到问题解决

问题二,clion运行提示undefined reference to `cv::imread(std::__cxx11::basic_string const&, int)’

如下图
ubuntu安装opencv c++ 版,配置使用clion开发,以及一些可能存在的坑解决方案_第2张图片
可以看到报错信息中提示,在链接时出错,这是因为找不到opencv的库

此时需要修改CMakeLists.txt

set(CMAKE_CXX_STANDARD xxx)add_executable(xxx main.cpp)中间添加

find_package(OpenCV REQUIRED)

message(STATUS "OpenCV library status:")
message(STATUS "    version: ${OpenCV_VERSION}")
message(STATUS "    libraries: ${OpenCV_LIBS}")
message(STATUS "    include path: ${OpenCV_INCLUDE_DIRS}")

if(CMAKE_VERSION VERSION_LESS "2.8.11")
    # Add OpenCV headers location to your include paths
    include_directories(${OpenCV_INCLUDE_DIRS})
endif()

在最末尾添加

target_link_libraries(test0001 ${OpenCV_LIBS})

刷新cmake

可以看到cmake给出提示,opencv的版本以及安装路径
ubuntu安装opencv c++ 版,配置使用clion开发,以及一些可能存在的坑解决方案_第3张图片

如果有多个版本的opencv,则需要在上方指定版本
修改find_package(OpenCV REQUIRED)find_package(OpenCV x.x.x REQUIRED),中间的为版本号
例如find_package(OpenCV 4.5.5 REQUIRED)
此时再运行代码,成功运行

问题三 执行代码过程中报错 Gtk-Message: 22:10:22.904: Failed to load module “appmenu-gtk-module”

执行以下命令即可

sudo apt-get install appmenu-gtk2-module appmenu-gtk3-module

问题四 执行sudo ldconfig 时,报错/sbin/ldconfig.real: /usr/lib/wsl/lib/libcuda.so.1 is not a symbolic link

常规方法是删除掉两个出问题的文件再创建软连接,但此时你会发现没有权限删除,我在参考链接4的博客中,找到了解决方案

以管理员权限,打开一个Windows Terminal窗口,然后输入以下指令,不要全部复制,一条一条输入。

wsl -e /bin/bash
cd /mnt/c/Windows/System32/lxss/lib
rm -r libcuda.so.1
rm -r libcuda.so
ln -s libcuda.so.1.1 libcuda.so.1
ln -s libcuda.so.1.1 libcuda.so

如果没有权限的话,前面加上sudo就可以了。
再尝试sudo ldconfig即可解决

参考链接

Ubuntu 18.04安装配置OpenCV 4.4.0
Linux 下 fatal error: opencv2/opencv.hpp: 没有那个文件或目录
Cannot get OpenCV to compile because of undefined references?
WSL2 + Dockerのメモ

你可能感兴趣的:(软件使用教程,opencv,ubuntu,c++)