GLIBCXX3.4.9 not found 解决方案
- 我是因为python的opencv的问题,可以尝试安装python版的opencv
pip install opencv-python
- 但是如果上面的方法解决不了这个问题,
sudo apt-get install libstdc++6
ARM架构的Jetson设备找不到 ‘v4l2_xxxx’
平台:天准 Jetson AGX Orin
编译时报错:/usr/local/lib/libavcodec.so: undefined reference to `v4l2_open'
根据 Libavcodec.so: undefined reference to `v4l2_open’ - Jetson & Embedded Systems / Jetson AGX Xavier - NVIDIA Developer Forums 和 Jetson TX2 and FFmpeg - Can't initialize nvrm channel - Jetson & Embedded Systems / Jetson TX2 - NVIDIA Developer Forums 提供的办法,似乎是因为 ffmpeg 的安装出现了问题,但是实际上ffmpeg是安装了的。
通过 jtop
命令可以看到,当前系统中OpenCV不支持CUDA,因此可以判断,Jetson (大部分厂家出厂的时候,OpenCV都不会给你做CUDA支持,需要自己编译) 自带的OpenCV也可能没有添加ffmpeg的支持,所以我添加对上述库的支持。
Jetson Xavier NX OpenCV 安装 - 知乎 (zhihu.com) 中提到的办法是卸载OpenCV并重装,这个方法没问题,不过没必要这样做。在编译使用OpenCV库的C++代码时,只需要修改 CMakeLists.txt
中OpenCV的路径即可。至于对Python的支持,可以后续在conda虚拟环境中单独配置。
于是我直接下载了OpenCV 4.5.4的 source 和 contrib 源码(注意Jetson Orin的CUDA版本为11.x,不支持4.7.0+的OpenCV),并编译,再将 CMakeLists.txt
中的 OPENCV_DIR
改为源码下 build
的路径。
不再报错。
Gstreamer 警告:module avidemux0 reported: Internal data stream error
发生在使用OpenCV读取视频或者相机图像时,症状就是...打不开图像。
是因为OpenCV缺少了Gstreamer相关支持,我认为在build的时候设置 -D WITH_GSTREAMER=ON \
应该能够解决这个问题。
但是事实证明我是傻逼,添加了GST以后,依旧不能打开图像。所以我认为这是由于OpenCV缺少关于ffmpeg的支持...需要确定ffmpeg是否正确安装。这个可以在OpenCV编译的结果中找到。起初我的OpenCV编译结果是这个样子的:
-- Video I/O:
-- DC1394: NO
-- FFMPEG: NO
-- avcodec: YES (58.18.100)
-- avformat: YES (58.12.100)
-- avutil: YES (56.14.100)
-- swscale: YES (5.1.100)
-- avresample: NO
-- v4l/v4l2: YES (linux/videodev2.h)
可以看到FFMPEG的选项为NO。导致这个情况的原因比较多,不过归根结底,是你的PKG_CONFIG没能找到FFMPEG。而在terminal中输入 ffmpeg
又能正确显示其版本,因此我决定卸载并重新安装FFMPEG。
在 jocover/jetson-ffmpeg: ffmpeg support on jetson nano (github.com) 仓库中有手动编译ffmpeg的方法。
在 patch ffmpeg and build 这个步骤中,git apply ffmpeg_nvmpi.patch
命令只需运行一次,多次运行会报错,不过没有影响,无视即可。然后,./configure --enable-nvmpi
也可能报错 nvmpi not found...
,去掉后面的 --enable-nvmpi
即可解决。nvmpi
使ffmpeg能通过显卡解码视频,不过我们的显卡更多用于推理,所以就先不管他了。
针对在make编译时出现的报错(对不起忘记截图了,像是编译过程中某些静态库出现了问题),在编译FFMPEG的时候,增加 –-disable-static
和 –-enable-shared
两个选项,并且注意,在原本Github仓库中的 README.MD
指南基础上,编译完FFMPEG后,要加入一步 sudo make install
。
参考文章
[1] https://askubuntu.com/questions/575505/glibcxx-3-4-20-not-found-how-to-fix-this-error