ubuntu22.04安装opencv2.4.13
Posted weixin_49830558
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ubuntu22.04安装opencv2.4.13相关的知识,希望对你有一定的参考价值。
运行一个老板的软件,需要opencv2.4.1
作为初学的,好难。。。
记录一下问题,自己看,我也是小白呜呜呜,要骂我先来:误人子弟!!
错误1.
E: 无法定位软件包 libjasper1
E: 无法定位软件包 libjasper-dev
换了源还是不行 没有办法了 最后摆了 没有管
2. cmake
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_CUDA=OFF -DENABLE_PRECOMPILED_HEADERS=OFF ..
(1) CMAKE_BUILD_TYPE=Release:生成的可执行文件就带有调试信息,供gdb和gdbserver使用了。值可以为Release或者Debug。
(2) CMAKE_INSTALL_PREFIX=/usr/local :安装路径 要是装下个版本记得要改
(3) WITH_CUDA=0FF: 禁用cuda
(4) -DENABLE_PRECOMPILED_HEADERS=OFF:cuda_next 错误
3. make -j8
make -j8
问题1:
/usr/local/gcc/gcc-6.3.0/include/c++/6.3.0/cstdlib:75:25: 致命错误:stdlib.h:没有那个文件或目录
#include_next <stdlib.h>
^
编译中断。
解决办法:编译加入 -DENABLE_PRECOMPILED_HEADERS=OFF (之前的camke已经加入)
出现新问题2:
/home/***/Downloads/opencv-2.4.13/modules/core/src/parallel.cpp:60:32: 致命错误:sys/sysctl.h:没有那个文件或目录
#include <sys/sysctl.h>
解决办法:
android - PHash fatal error: 'sys/sysctl.h' file not found - Stack Overflow
我先
locate sysctl.h
发现确实sys下没有,而linux下有,接下来就是把所有sys/sysctl.h,改成linux/sysctl.h,直到不再报错
之后又有错误3:
错误:‘AVFMT_RAWPICTURE’在此作用域中尚未声明
错误:‘CODEC_FLAG_GLOBAL_HEADER’在此作用域中尚未声明
方法:
忘了是哪篇博客了,用了别的大佬的办法:
在 opencv/modules/videoio/src/cap_ffmpeg_impl.hpp 顶端添加
#define AV_CODEC_FLAG_GLOBAL_HEADER (1 << 22)
#define CODEC_FLAG_GLOBAL_HEADER AV_CODEC_FLAG_GLOBAL_HEADER
#define AVFMT_RAWPICTURE 0x0020
错误4:
undefined reference to `std::random_device::_M_getentropy() const@GLIBCXX_3.4.25'
/usr/bin/ld: /lib/x86_64-linux-gnu/libopenmpt.so.0: undefined reference to `std::to_chars(char*, char*, double)@GLIBCXX_3.4.29'
/usr/bin/ld: /lib/x86_64-linux-gnu/libopenmpt.so.0: undefined reference to `std::__throw_bad_array_new_length()@GLIBCXX_3.4.29'
解决:
尝试1(错误):没找到解决方法,最后把gcc升级到9.1.0,问题还是没有解决,唉...
尝试2:(没尝试完,装了一天vtk没装上)
看到一个回答:安装
vtk
hdf5 (建议安装高版本的,我在安装低版本的时候会有各种各样的错误,成功安装了1.13.2
(Ubuntu 安装 HDF5 C++库_大作家佚名的博客-CSDN博客
glew(Ubuntu下glfw的安装与使用_parry_liu的博客-CSDN博客)
尝试3(正确):换了gcc-11
换gcc版本(前提是已经装好了):
查看已经有的gcc:
ls -l /usr/bin/gcc*
设置软连接(设置过的跳过):前面的目录是查到的gcc路径,最后的数字是自己写的版本号
sudo ln -s /usr/local/gcc/gcc-9.1.0/bin/gcc /usr/bin/gcc-9
添加到系统管理器中:
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 40
切换 gcc 版本:按照提示输入数字选择版本 以后直接换就行
sudo update-alternatives --config gcc
同理换g++
sudo ln -s /usr/local/gcc/gcc-9.1.0/bin/g++ /usr/bin/g++-9
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-9 40
切换g++版本:
sudo update-alternatives --config g++
最后查看一下版本,检查一下:
gcc --version
g++ --version
成功了。。。
3. make install
没有报错
总结:早知道就直接用gcc11le ,主要是老师的那个东西不能用gcc11编译,早早地换了低版本,换早了
以上是关于ubuntu22.04安装opencv2.4.13的主要内容,如果未能解决你的问题,请参考以下文章
ubuntu14.04安装opencv2.4.13报错 -fPIC