草庐IT

Ubuntu 20.04源码编译安装OpenCV 4.7.0

憨豆的小泰迪 2024-01-07 原文

目录

前言

1--下载OpenCV 4.7.0

2--编译安装OpenCV 4.7.0

3--测试

3-1--查看安装的版本

3-2--基于VSCode和CMake测试项目

4--报错解决(重点!)

4-1--OpenCV与FFmpeg不兼容

4-2--LIBTIFF报错

4-3--系统与Anaconda的库lib冲突

4-4--测试时CMake的find_package报错


前言

        建议先看第4节相关报错及解决方法,再进行安装!

1--下载OpenCV 4.7.0

        下载 OpenCV 4.7.0 的源码 Sources:OpenCV 4.7.0

2--编译安装OpenCV 4.7.0

① 解压压缩包:

unzip opencv-4.7.0.zip

② 安装依赖:

cd opencv-4.7.0

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

③ 编译:

mkdir build 

cd build

cmake -D CMAKE_BUILD_TYPE=Release -D OPENCV_GENERATE_PKGCONFIG=ON -D CMAKE_INSTALL_PREFIX=/usr/local -DBUILD_TIFF=ON ..

注:-DBUILD_TIFF=ON 的作用在之后报错的章节中会说明;

④ 安装:

sudo make install -j8

# -j8表示CPU将使用多线程,加快安装速度

3--测试

3-1--查看安装的版本

pkg-config --modversion opencv4

        一般情况下,正常输入上面的命令就可以直接查看安装的版本,如果失败可以参考链接1进行配置环境;

3-2--基于VSCode和CMake测试项目

① 编写 main.cpp 文件:

# include<cstdio>
# include"opencv2/opencv.hpp"
 
using namespace cv;
 
int main(){
    printf("Hello, Opencv4!\n");
    Mat image = imread("./test1.jpg"); // 读取图片
 
    namedWindow("img1"); // 创建窗口
    imshow("img1", image); // 显示读取的图片
    waitKey(0);
    return 0;
}

② 使用 g++ 直接编译:

g++ main.cpp -o test `pkg-config --cflags --libs opencv4`

③ 使用 CMakeLists.txt 进行编译:

cmake_minimum_required(VERSION 3.10)  # 指定 cmake的 最小版本
project(test) # 设置项目名称
#set(OpenCV_DIR /usr/local/lib/cmake/opencv4)
find_package(OpenCV REQUIRED)
INCLUDE_DIRECTORIES(${OpenCV_INCLUDE_DIRS})
add_executable(main main.cpp) # 生成可执行文件
target_link_libraries(main ${OpenCV_LIBS} ) # 设置target需要链接的库
mkdir build

cd build

cmake ..

make

./main

4--报错解决(重点!)

4-1--OpenCV与FFmpeg不兼容

        博主在使用Ubuntu安装OpenCV前,曾基于源码编译安装过FFmpeg 5.1,两者存在冲突,会出现以下错误:

        ① modules/videoio/CMakeFiles/opencv_videoio.dir/src/cap_ffmpeg.cpp.o] Error 1;
        ② modules/videoio/CMakeFiles/opencv_videoio.dir/all] Error 2

        ③ make[2]: *** [modules/videoio/CMakeFiles/opencv_videoio.dir/build.make:302: lib/libopencv_videoio.so.4.7.0] Error 1;

        ④ relocation R_X86_64_PC32 against symbol `ff_pw_9' can not be used when making a shared object; recompile with -fPIC;

        出现上面几个错误,均与博主源码编译安装的FFmpeg 5.1有关。

解决方法:卸载FFmpeg 5.1,博主改用FFmpeg 4.3得以兼容;

4-2--LIBTIFF报错

        博主在编译安装OpenCV时,出现了以下 LIBTIFF 的错误:

        ① /usr/bin/ld: ../../lib/libopencv_imgcodecs.so.4.7.0: undefined reference to `TIFFReadDirectory@LIBTIFF_4.0';

        ② make[2]: *** [modules/core/CMakeFiles/opencv_test_core.dir/build.make:812: bin/opencv_test_core] Error 1;

        ③ make[1]: *** [CMakeFiles/Makefile2:1985: modules/core/CMakeFiles/opencv_test_core.dir/all] Error 2 make: *** [Makefile:163: all] Error 2;

解决方法:在编译安装的时候加上 -DBUILD_TIFF=ON 的选项,这里参考链接2

cmake -D CMAKE_BUILD_TYPE=Release -D OPENCV_GENERATE_PKGCONFIG=ON -D CMAKE_INSTALL_PREFIX=/usr/local -DBUILD_TIFF=ON ..

4-3--系统与Anaconda的库lib冲突

        博主在编译安装OpenCV的时候,出现了以下错误:

        ① /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libfontconfig.so: undefined reference to `uuid_parse@UUID_1.0';

        ② make[2]: *** [modules/highgui/CMakeFiles/opencv_test_highgui.dir/build.make:122: bin/opencv_test_highgui] Error 1;

        ③ make[1]: *** [CMakeFiles/Makefile2:2938: modules/highgui/CMakeFiles/opencv_test_highgui.dir/all] Error 2 make: *** [Makefile:163: all] Error 2;

        报错的原因是Conda 的库与系统的库出现了冲突,具体分析可参考链接3;但博主并没有采用参考链接的解决方法,而是猜测只是由于博主在编译 OpenCV 的时候,并没有退出 Conda 环境;

解决方法:在终端退出Conda环境重新进行编译安装;

conda deactivate

4-4--测试时CMake的find_package报错

        博主在 VSCode 进行程序测试时,无法利用 CMakeLists.txt 进行间接编译,出现了以下错误:

        ① By not providing "FindOpencv.cmake" in CMAKE_MODULE_PATH this project has asked CMake to find a package configuration file provided by "Opencv", but CMake did not find one.

        ② Could not find a package configuration file provided by "Opencv" with any
  of the following names: OpencvConfig.cmake opencv-config.cmake;

         一开始,博主以为是没有设置 OpenCV_DIR 导致以上报错,所以参考其它答案使用了 Set 命令设置 OpenCV_DIR,但并不能解决;

        真正的原因其实是,一开始博主在 CMakeLists.txt 中的 find_package(Opencv REQUIRED)使用的小写的 cv,这才导致了错误。但博主在 Windows 和 Mac 系统下都使用了小写的 Opencv 并没有任何错误(离大谱,属实过分!!!),所以这里不确定真正的原因,部分博主分析了可能的原因,具体可参考链接4

解决方法:将find_package的Opencv改为OpenCV;

衷心建议结合OpenCV Github项目的issue(问题专栏)进行编译安装!!!

有关Ubuntu 20.04源码编译安装OpenCV 4.7.0的更多相关文章

  1. ruby - 在 64 位 Snow Leopard 上使用 rvm、postgres 9.0、ruby 1.9.2-p136 安装 pg gem 时出现问题 - 2

    我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po

  2. ruby - 完全离线安装RVM - 2

    我打算为ruby​​脚本创建一个安装程序,但我希望能够确保机器安装了RVM。有没有一种方法可以完全离线安装RVM并且不引人注目(通过不引人注目,就像创建一个可以做所有事情的脚本而不是要求用户向他们的bash_profile或bashrc添加一些东西)我不是要脚本本身,只是一个关于如何走这条路的快速指针(如果可能的话)。我们还研究了这个很有帮助的问题:RVM-isthereawayforsimpleofflineinstall?但有点误导,因为答案只向我们展示了如何离线在RVM中安装ruby。我们需要能够离线安装RVM本身,并查看脚本https://raw.github.com/wayn

  3. ruby-on-rails - rails 目前在重启后没有安装 - 2

    我有一个奇怪的问题:我在rvm上安装了ruby​​onrails。一切正常,我可以创建项目。但是在我输入“railsnew”时重新启动后,我有“程序'rails'当前未安装。”。SystemUbuntu12.04ruby-v"1.9.3p194"gemlistactionmailer(3.2.5)actionpack(3.2.5)activemodel(3.2.5)activerecord(3.2.5)activeresource(3.2.5)activesupport(3.2.5)arel(3.0.2)builder(3.0.0)bundler(1.1.4)coffee-rails(

  4. ruby - 如何为 emacs 安装 ruby​​-mode - 2

    我刚刚为fedora安装了emacs。我想用emacs编写ruby。为ruby​​提供代码提示、代码完成类型功能所需的工具、扩展是什么? 最佳答案 ruby-mode已经包含在Emacs23之后的版本中。不过,它也可以通过ELPA获得。您可能感兴趣的其他一些事情是集成RVM、feature-mode(Cucumber)、rspec-mode、ruby-electric、inf-ruby、rinari(用于Rails)等。这是我当前用于Ruby开发的Emacs配置:https://github.com/citizen428/emacs

  5. ruby-on-rails - 无法在centos上安装therubyracer(V8和GCC出错) - 2

    我正在尝试在我的centos服务器上安装therubyracer,但遇到了麻烦。$geminstalltherubyracerBuildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingtherubyracer:ERROR:Failedtobuildgemnativeextension./usr/local/rvm/rubies/ruby-1.9.3-p125/bin/rubyextconf.rbcheckingformain()in-lpthread...yescheckingforv8.h...no***e

  6. ruby - 通过 RVM (OSX Mountain Lion) 安装 Ruby 2.0.0-p247 时遇到问题 - 2

    我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search

  7. ruby - 如何在 Lion 上安装 Xcode 4.6,需要用 RVM 升级 ruby - 2

    我实际上是在尝试使用RVM在我的OSX10.7.5上更新ruby,并在输入以下命令后:rvminstallruby我得到了以下回复:Searchingforbinaryrubies,thismighttakesometime.Checkingrequirementsforosx.Installingrequirementsforosx.Updatingsystem.......Errorrunning'requirements_osx_brew_update_systemruby-2.0.0-p247',pleaseread/Users/username/.rvm/log/138121

  8. ruby - Fast-stemmer 安装问题 - 2

    由于fast-stemmer的问题,我很难安装我想要的任何ruby​​gem。我把我得到的错误放在下面。Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingfast-stemmer:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcreatingMakefilemake"DESTDIR="cleanmake"DESTDIR=

  9. ruby - 安装 Ruby 时遇到问题(无法下载资源 "readline--patch") - 2

    当我尝试安装Ruby时遇到此错误。我试过查看this和this但无济于事➜~brewinstallrubyWarning:YouareusingOSX10.12.Wedonotprovidesupportforthispre-releaseversion.Youmayencounterbuildfailuresorotherbreakages.Pleasecreatepull-requestsinsteadoffilingissues.==>Installingdependenciesforruby:readline,libyaml,makedepend==>Installingrub

  10. ruby - 如何在 Ubuntu 中清除 Ruby Phusion Passenger 的缓存? - 2

    我试过重新启动apache,缓存的页面仍然出现,所以一定有一个文件夹在某个地方。我没有“公共(public)/缓存”,那么我还应该查看哪些其他地方?是否有一个URL标志也可以触发此效果? 最佳答案 您需要触摸一个文件才能清除phusion,例如:touch/webapps/mycook/tmp/restart.txt参见docs 关于ruby-如何在Ubuntu中清除RubyPhusionPassenger的缓存?,我们在StackOverflow上找到一个类似的问题:

随机推荐