当前位置:网站首页>树莓派4B安装OPENCV遇到ffmpeg库版本太高的问题【后续更新】
树莓派4B安装OPENCV遇到ffmpeg库版本太高的问题【后续更新】
2022-08-02 03:35:00 【MAUM】
较新的安装教程:树莓派4B安装OpenCV教程_luoi_han的博客-CSDN博客_树莓派4b安装opencv
这几天安装opencv,其他的问题好说,但是遇到了这个问题:
/home/pi/Downloads/opencv/opencv-master/modules/videoio/src/cap_ffmpeg_impl.hpp:2347:42: error: invalid conversion from ‘const AVCodec*’ to ‘AVCodec*’ [-fpermissive]
AVCodec* codec = avcodec_find_encoder(c->codec_id);
因为在此前,我使用ffmpeg开发了音频采集软件,安装了最新的ffmpeg库。ffmpeg库在3.3版本及以后,有了很大改动,废弃了很多函数,导致程序无法兼容,比如,废弃了 av_register_all(), av_stream 类也没有了codec成员等。
最初,我还以为可以使用安装依赖库的方法降低库版本,比如:
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
但是尝试了很多次都失败了。无奈,只能狠心放大招了,重装ffmpeg
1、卸载ffmpeg:
sudo apt-get purge ffmpeg
2、安装ffmpeg
2.1 下载源码
选择3.3版本以下的源码,下载,然后解压。直接双击下载好的.tar.gz,然后指定一个目录即可,我是放在了Downloads下的ffmpeg文件夹下。
2.2 配置和安装
cd 到解压后的目录下,先配置编译选项
./configure --arch=armel --target-os=linux --enable-gpl --enable-libx264 --enable-nonfree
然后编译
sudo make -j4
然后安装
sudo make install
这个时候你会发现,/usr/local/lib文件夹下高版本的库 xxxx.a的创建时间什么的都已经是最新的,说明已经安装成功!
如果没有添加环境变量路径,可以:
sudo nano /etc/ld.so.conf
然后增加一行:
/usr/local/lib
ctrl+x -> y ->enter 保存退出,然后刷新环境变量:
sudo ldconfig
这样动态库就生效了
接下来需要重新配置和编译:
删除build下的所有东西:
sudo rm -r *
然后配置make:
sudo cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D INSTALL_C_EXAMPLES=ON \ -D INSTALL_PYTHON_EXAMPLES=OFF \ -D OPENCV_EXTRA_MODULES_PATH=/home/pi/Downloads/opencv/opencv_contrib-master/modules \ -D ENABLE_PRECOMPILED_HEADERS=OFF \ -D BUILD_EXAMPLES=ON ..
然后编译还是会出问题,提示找不到对应的库,但是明明已经安装了libav* 的那些库:
[ 76%] Building CXX object modules/videoio/CMakeFiles/opencv_test_videoio.dir/test/test_video_io.cpp.o
[ 76%] Linking CXX executable ../../bin/opencv_test_videoio
/usr/bin/ld: ../../lib/libopencv_videoio.so.4.4.0: undefined reference to `av_bitstream_filter_init'
/usr/bin/ld: ../../lib/libopencv_videoio.so.4.4.0: undefined reference to `av_bitstream_filter_close'
/usr/bin/ld: ../../lib/libopencv_videoio.so.4.4.0: undefined reference to `avcodec_decode_video2'
/usr/bin/ld: ../../lib/libopencv_videoio.so.4.4.0: undefined reference to `avcodec_get_context_defaults3'
/usr/bin/ld: ../../lib/libopencv_videoio.so.4.4.0: undefined reference to `av_bitstream_filter_filter'
/usr/bin/ld: ../../lib/libopencv_videoio.so.4.4.0: undefined reference to `av_register_all'
/usr/bin/ld: ../../lib/libopencv_videoio.so.4.4.0: undefined reference to `av_lockmgr_register'
2022.04.20 最终解决方案:
SD卡格掉,在不安装ffmpeg的情况下,参考例程安装opencv。快速开卡安装请参考:
2022.07.22 新的解决方案
由于库版本问题,更新了opencv到4.5.3版本,这个版本依赖的ffmpeg是 4.1版本的,下载了4.1版本的,具体链接参考下面这个网址:
FFMPEG 最全版本介绍及下载_seniorwizard的博客-CSDN博客_ffmpeg 所有版本
为了不让QT报错,之前把最新版本的FFMPEG下载了,也就是xxx.so.59等,否则QT会报ffmpeg多个版本库可能冲突的提示。现在还是想用命令行的ffmpeg,那就安装4.1的ffmpeg,命令行现在没问题了,QT中引用ffmpeg库和opencv的话,建议还是都使用opencv安装的ffmpeg库,避免冲突。
边栏推荐
猜你喜欢
随机推荐
jmeter之数据库连接JDBC安装与使用
笔记本电脑充电问题
网络 7 层架构
v-model修饰符
剑指Offer 32.Ⅱ从上到下打印二叉树
最长连续不重复子序列 双指针
剑指Offer 16.数值的整数次方 快速幂+ 递归
Hash table problem solving method
PHP将字符切割成每个拼音
谷粒商城10——搜索、商品详情、异步编排
工作过程中问题汇总
flasgger手写phpwind接口文档
[Database] Four characteristics of transaction
【MQ-3 Alcohol Detector and Arduino Detect Alcohol】
8款最佳实践,保护你的 IaC 安全!
拖动元素边缘改变宽度
位居榜首 | 未来智安荣登CCIA「2022年中国网安产业潜力之星」榜单
学习(四):显示FPS,和自定义显示调试
vector的使用和模拟实现:
全排列 DFS