安装完一个软件什么的,如果今天不写个记录,过两天就全部忘了.这个过程中出现过多次编译错误,奇奇怪怪的什么都有,多半都是cmake的时候配置不全导致的.
非常感谢以下博主:
Jetson Xavier NX安装opencv3.4.5(小白教程)
安装opencv4.6.0过程
① 下载:Releases - OpenCV(选择 sources)
② 解压进入目录
③ mkdir build
④ cd build
⑤ 安装环境依赖:
sudo apt install -y build-essential checkinstall cmake pkg-config yasm git gfortran
sudo apt update
sudo apt install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
sudo apt install -y libjpeg8-dev libjasper-dev libpng12-dev libtiff5-dev libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev libxine2-dev libv4l-dev
sudo apt install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgtk2.0-dev libtbb-dev libatlas-base-dev libfaac-dev libmp3lame-dev libtheora-dev libvorbis-dev libxvidcore-dev libopencore-amrnb-dev libopencore-amrwb-dev x264 v4l-utils
sudo apt install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
⑥ cmake(别急,还要加上出现问题后解决方案中的两条)
cmake -D WITH_TBB=ON -D WITH_EIGEN=ON -D OPENCV_GENERATE_PKGCONFIG=ON ..
cmake -D BUILD_DOCS=ON -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_EXAMPLES=OFF ..
cmake -D WITH_OPENCL=OFF -D WITH_CUDA=OFF -D BUILD_opencv_gpu=OFF -D BUILD_opencv_gpuarithm=OFF -D BUILD_opencv_gpubgsegm=OFF ..
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
cmake -D WITH_TBB=ON -D WITH_EIGEN=ON -D OPENCV_GENERATE_PKGCONFIG=ON -D BUILD_DOCS=ON -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_EXAMPLES=OFF -D WITH_OPENCL=OFF -D WITH_CUDA=OFF -D BUILD_opencv_gpu=OFF -D BUILD_opencv_gpuarithm=OFF -D BUILD_opencv_gpubgsegm=O -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
遇到的问题:
/usr/bin/ld: ../../lib/libopencv_imgcodecs.so.4.6.0: undefined reference to `TIFFReadDirectory@LIBTIFF_4.0'
/usr/bin/ld: ../../lib/libopencv_imgcodecs.so.4.6.0: undefined reference to `TIFFWriteEncodedStrip@LIBTIFF_4.0'
/usr/bin/ld: ../../lib/libopencv_imgcodecs.so.4.6.0: undefined reference to `TIFFIsTiled@LIBTIFF_4.0'
/usr/bin/ld: ../../lib/libopencv_imgcodecs.so.4.6.0: undefined reference to `TIFFOpen@LIBTIFF_4.0'
/usr/bin/ld: ../../lib/libopencv_imgcodecs.so.4.6.0: undefined reference to `TIFFReadEncodedStrip@LIBTIFF_4.0'
/usr/bin/ld: ../../lib/libopencv_imgcodecs.so.4.6.0: undefined reference to `TIFFSetField@LIBTIFF_4.0'
/usr/bin/ld: ../../lib/libopencv_imgcodecs.so.4.6.0: undefined reference to `TIFFWriteScanline@LIBTIFF_4.0'
/usr/bin/ld: ../../lib/libopencv_imgcodecs.so.4.6.0: undefined reference to `TIFFGetField@LIBTIFF_4.0'
/usr/bin/ld: ../../lib/libopencv_imgcodecs.so.4.6.0: undefined reference to `TIFFScanlineSize@LIBTIFF_4.0'
/usr/bin/ld: ../../lib/libopencv_imgcodecs.so.4.6.0: undefined reference to `TIFFWriteDirectory@LIBTIFF_4.0'
/usr/bin/ld: ../../lib/libopencv_imgcodecs.so.4.6.0: undefined reference to `TIFFSetWarningHandler@LIBTIFF_4.0'
/usr/bin/ld: ../../lib/libopencv_imgcodecs.so.4.6.0: undefined reference to `TIFFSetErrorHandler@LIBTIFF_4.0'
/usr/bin/ld: ../../lib/libopencv_imgcodecs.so.4.6.0: undefined reference to `TIFFReadEncodedTile@LIBTIFF_4.0'
/usr/bin/ld: ../../lib/libopencv_imgcodecs.so.4.6.0: undefined reference to `TIFFReadRGBATile@LIBTIFF_4.0'
/usr/bin/ld: ../../lib/libopencv_imgcodecs.so.4.6.0: undefined reference to `TIFFClose@LIBTIFF_4.0'
/usr/bin/ld: ../../lib/libopencv_imgcodecs.so.4.6.0: undefined reference to `TIFFRGBAImageOK@LIBTIFF_4.0'
/usr/bin/ld: ../../lib/libopencv_imgcodecs.so.4.6.0: undefined reference to `TIFFClientOpen@LIBTIFF_4.0'
/usr/bin/ld: ../../lib/libopencv_imgcodecs.so.4.6.0: undefined reference to `TIFFReadRGBAStrip@LIBTIFF_4.0'
collect2: error: ld returned 1 exit status
make[2]: *** [apps/annotation/CMakeFiles/opencv_annotation.dir/build.make:89:bin/opencv_annotation] 错误 1
make[1]: *** [CMakeFiles/Makefile2:2630:apps/annotation/CMakeFiles/opencv_annotation.dir/all] 错误 2
make[1]: *** 正在等待未完成的任务....
/usr/bin/ld: ../../lib/libopencv_imgcodecs.so.4.6.0: undefined reference to `TIFFReadRGBAStrip@LIBTIFF_4.0'
/usr/bin/ld: ../../lib/libopencv_imgcodecs.so.4.6.0: undefined reference to `TIFFReadDirectory@LIBTIFF_4.0'
/usr/bin/ld: ../../lib/libopencv_imgcodecs.so.4.6.0: undefined reference to `TIFFWriteEncodedStrip@LIBTIFF_4.0'
/usr/bin/ld: ../../lib/libopencv_imgcodecs.so.4.6.0: undefined reference to `TIFFIsTiled@LIBTIFF_4.0'
/usr/bin/ld: ../../lib/libopencv_imgcodecs.so.4.6.0: undefined reference to `TIFFWriteScanline@LIBTIFF_4.0'
/usr/bin/ld: ../../lib/libopencv_imgcodecs.so.4.6.0: undefined reference to `TIFFGetField@LIBTIFF_4.0'
/usr/bin/ld: ../../lib/libopencv_imgcodecs.so.4.6.0: undefined reference to `TIFFScanlineSize@LIBTIFF_4.0'
/usr/bin/ld: ../../lib/libopencv_imgcodecs.so.4.6.0: undefined reference to `TIFFWriteDirectory@LIBTIFF_4.0'
/usr/bin/ld: ../../lib/libopencv_imgcodecs.so.4.6.0: undefined reference to `TIFFReadEncodedTile@LIBTIFF_4.0'
/usr/bin/ld: ../../lib/libopencv_imgcodecs.so.4.6.0: undefined reference to `TIFFReadRGBATile@LIBTIFF_4.0'
/usr/bin/ld: ../../lib/libopencv_imgcodecs.so.4.6.0: undefined reference to `TIFFClose@LIBTIFF_4.0'
/usr/bin/ld: ../../lib/libopencv_imgcodecs.so.4.6.0: undefined reference to `TIFFClientOpen@LIBTIFF_4.0'
/usr/bin/ld: ../../lib/libopencv_imgcodecs.so.4.6.0: undefined reference to `TIFFRGBAImageOK@LIBTIFF_4.0'
/usr/bin/ld: ../../lib/libopencv_imgcodecs.so.4.6.0: undefined reference to `TIFFOpen@LIBTIFF_4.0'
/usr/bin/ld: ../../lib/libopencv_imgcodecs.so.4.6.0: undefined reference to `TIFFReadEncodedStrip@LIBTIFF_4.0'
/usr/bin/ld: ../../lib/libopencv_imgcodecs.so.4.6.0: undefined reference to `TIFFSetField@LIBTIFF_4.0'
/usr/bin/ld: ../../lib/libopencv_imgcodecs.so.4.6.0: undefined reference to `TIFFSetWarningHandler@LIBTIFF_4.0'
/usr/bin/ld: ../../lib/libopencv_imgcodecs.so.4.6.0: undefined reference to `TIFFSetErrorHandler@LIBTIFF_4.0'
collect2: error: ld returned 1 exit status
make[2]: *** [apps/visualisation/CMakeFiles/opencv_visualisation.dir/build.make:89:bin/opencv_visualisation] 错误 1
make[1]: *** [CMakeFiles/Makefile2:2661:apps/visualisation/CMakeFiles/opencv_visualisation.dir/all] 错误 2
解决办法:
cmake -DCMAKE_BUILD_TYPE=Release -D OPENCV_GENERATE_PKGCONFIG=ON -DBUILD_EXAMPLES=ON -D CMAKE_INSTALL_PREFIX=/usr/local ..
cmake -D BUILD_TIFF=ON .. # 这句很重要解决上面问题的关键
⑦ make -j8
⑧ sudo make install
查看版本:
opencv_version
# 4.6.0
pkg-config --modversion opencv4
# 4.6.0
⑨ 后续过程:
apt-get install pkg-config
vim /etc/ld.so.conf.d/opencv.conf # (打开后加入/usr/local/lib,然后保存退出)
sudo ldconfig
sudo apt-get install vim-gtk
sudo vim /etc/bash.bashrc # (加入PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig \ export PKG_CONFIG_PATH)
source /etc/bash.bashrc
find ./ -name opencv4.pc
# ./unix-install/opencv4.pc
pkg-config --cflags opencv4
# -I/usr/local/include/opencv4
⑩ 验证:
方法一:
cd opencv/samples/cpp/
g++ edge.cpp `pkg-config --cflags --libs opencv4`
./a.out
方法二:
cd ../opencv-4.6.0/samples/cpp/example_cmake
cmake .
make
./opencv_example
完 结 !
若要卸载:
卸载默认Orin上的版本:
sudo apt purge libopencv*
sudo apt autoremove
sudo apt update
卸载其他版本:
cd .../opencv-4.6.0/build
sudo make uninstall
cd .../opencv-4.6.0
sudo rm -r build
其他方法:
Jetson Xavier NX OpenCV 安装 - 知乎
OpenCV: Tags · opencv/opencv · GitHub
opencv_contrib: Tags · opencv/opencv_contrib · GitHu