基本步驟參考我同事的博客:https://blog.csdn.net/hunzhangzui9837/article/details/89846928
以下是在移植到imx8平台時的筆記和遇到的問題及解決辦法:(其他平台一樣的步驟,只是交叉編譯工具鏈不一樣而已)
1.Opencv編譯去掉和關閉的模塊:
關閉:gphoto2,WITH_GTK,WITH_TIFF,1394,cuda
打開:JPEG,PNG
配置完成,都要再次點擊 Configure,點 Generate。
opencv_contrib編譯
cmake-gui
找到 OPENCV_EXTRA_MODULES_PATH 項,選擇擴展庫源碼 opencv_contrib-3.3.1 目錄下的 modules 目錄
配置完成,都要再次點擊 Configure,點 Generate。
2.fatal error: linux/compiler-gcc5.h: 沒有那個文件或目錄
此錯誤的原因是交叉編譯內核的gcc版本和本地系統Ubuntu的gcc版本不一致,Ubuntu的gcc版本高於內核gcc版本,采取降低Ubuntu的gcc版本,如下命令操作:
gcc下降
安裝
sudo apt-get install -y gcc-4.7
sudo apt-get install -y g++-4.7
重新建立軟連接
cd /usr/bin #進入/usr/bin文件夾下
sudo rm -r gcc #移除之前的軟連接
sudo ln -sf gcc-4.7 gcc #建立gcc4.7的軟連接
sudo rm -r g++ #同gcc
sudo ln -sf g++-4.7 g++
可以通過 gcc -version 查看當前gcc版本
3.修改權限
chmod -R 777 opencv-3.3.1 文件夾目錄下所有文件給最高權限
錯誤處理:
1.錯誤一
報錯:undefined reference to `png_init_filter_functions_neon' 未定義的引用
交叉編譯 opencv3.3.1 ffmpeg libpng
修改
${HOME}/opencv-3.3.1/3rdparty/libpng/pngpriv.h
128 /*# if (defined(ARM_NEON) || defined(__ARM_NEON)) && */
為
129 # if defined(PNG_ARM_NEON) && (defined(ARM_NEON) || defined(__ARM_NEON)) && \
2.錯誤二: zlib.h: No such file or directory
設置ZLIB_INCLUDE_DIRS 值為 /home/mico/software/opencv-3.3.1/3rdparty/zlib
3.在arm平台上運行提示沒有GTK不能顯示的錯誤,編譯opencv的時候需要把QT編譯進去