0、前言
- 在要移植opecv和SeetaFaceEngine-master到ARM板子上運行的所有步驟之前,有幾點需要注意的:
- 查看板子運行的Kernel版本
- 交叉編譯工具鏈的gcc版本,關鍵就是工具鏈里庫所能支持的最低內核版本
- 可以用file xxx,查看(xxx是可執行程序,你可以隨意編寫一個簡單helloworld來編譯后,測試)
- 工具鏈的版本會影響到opecv、seetaface的編譯工程,以及編譯出來的opecv庫、seetaface最終的可執行文件能否在板子的內核里跑起來
- 文件系統系統里的lib庫最好用與上面提到的同一個工具鏈里的庫
- 下面操作不要在共享文件夾目錄中進行,在Ubuntu其他原生目錄中進行
- 下篇交叉編譯seetafaceengine-master:https://www.cnblogs.com/xz-954042850-qq/p/12599446.html
1、前提准備
- Linux操作系統:Ubuntu 16.04
- OpenCv版本:3.4.6
- 交叉工具鏈:arm-2014.05-29-arm-none-linux-gnueabi-,gcc version 4.8.3
- 目標平台:ARM
- 板 子:study210,kernel:2.6.35
- SoC :S5PV210
- 編譯時間:2020/3/30
2、下載安裝
- opencv官網下載opencv(Source版本)
- 下載交叉編譯工具鏈
- arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz
- 下載鏈接:https://www.veryarm.com/arm-none-linux-gnueabi-gcc#linux
- 安裝工具鏈
- 解壓:tar -xvjf arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz
- vim /etc/profile
- 在末尾添加工具鏈路徑進環境變量PATH
- export PATH=xxxxx:$PATH
- 同步生效一下:
- source /etc/profile
- 說明:
- 編譯工具:xxx/arm-2014.05/bin/arm-none-linux-gnueabi-gcc、xxx/xxx/arm-2014.05/bin/arm-none-linux-gnueabi-g++
- 板子根文件系統需要的交叉編譯庫:arm-2014.05/arm-none-linux-gnueabi/libc/lib/
- 安裝cmake
- apt-get install cmake(當然除了這種方式,還可以下載cmake壓縮包來解壓安裝)
- cmake --version查看版本,盡量安裝3.1以上的版本,我的是3.5.1
- 安裝cmake-qt-gui
- sudo apt-get install cmake-qt-gui
- 利用cmake-gui命令進入cmake的gui界面進行一些配置,例如交叉編譯工具鏈的配置
- 安裝依賴庫:
sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff4.dev libswscale-dev libjasper-dev
3、在opencv源碼目錄中創建一個文件夾,用於放置編譯輸出的文件,以免污染opencv源碼目錄
- mkdir build
4、命令行輸入:cmake-gui,進入界面設置
說明:Where is the source code對應opencv的文件夾,Where to build the binaries對應opencv存放編譯好的配置文件等信息的文件夾(剛才創建的build文件夾)
選擇第四項,交叉編譯:
注意:Linux要大寫首字母,不能寫成linux。Target Root代表標准庫與頭文件的搜索起始位置,可以理解為對應交叉編譯工具的根目錄
下圖中的工具鏈是沒選對的,C:/usr/local/arm/arm-2014.05/bin/arm-none-linux-gnueabi-gcc,C++:/usr/local/arm/arm-2014.05/bin/arm-none-linux-gnueabi-g++
Target Root:/usr/local/arm/arm-2014.05/bin/
這里我寫的路徑不一定跟你的一樣,因為工具鏈安裝的位置不同,你要靈活點。
我的opencv編譯后的存放路徑,也就是庫路徑:/root/opencv_dir/lib_opencv_dir(這是自己新建的)
5、編譯
sudo make -j4-------這是在上面自己創建的build中執行的
也許會報錯:
解決方法:修改路徑,例如我的:/root/opencv_dir/opencv-3.4.6/3rdparty/zlib(當然在這步之前,你要find / -name zlib.h查看zlib.h是否在那個目錄存在)
有的在make編譯前勾選了BUILD_ZLIB,但是在編譯之后,在cmake-gui這里找不到這zlib的頭文件路徑,這情況我沒解決。
此后,還會貌似還會有其他報錯問題,都可以通過將錯誤信息粘貼到百度查找解決方法,粘貼的信息應局部、全部都試試,例如對於上面的錯誤,局部信息就是fatal error zlib.h:No such or file or directory
make成功后……
6、安裝
sudo make install
此后,在上面對應自己指定的文件夾中就可以看到編譯出來的opencv庫了,例如我的是:/root/opencv_dir/lib_opencv_dir
通過file xxx.so可以查看是否交叉編譯成功了
7、配置一些OpenCV的編譯環境
- 將OpenCV的庫添加到路徑,讓系統找到
- sudo gedit /etc/ld.so.conf.d/opencv.conf
- 在末尾添加:/root/opencv_dir/lib_opencv_dir/lib--------這是我編譯到的我的opencv庫路徑,你要填你的
- 右上角點擊保存,然后退出
- sudo ldconfig-----讓剛才的配置生效
- 配置bash
- 在末尾添加:----------------------------------------------------------看清楚,對應填好你的,別盲目抄
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/root/opencv_dir/lib_opencv_dir/lib/pkgconfig
export PKG_CONFIG_PATH - 右上角點擊保存,然后退出
- source /etc/bash.bashrc---------------------------------------------同步讓剛才配置生效
- 更新
- sudo updatedb
到這里,opencv交叉編譯,配置已完成!!!
體會小結:
- 在這編譯過程中體會到了交叉編譯工具鏈的版本選擇真的非常重要,這不僅會影響到opecv的編譯,還會影響到seetaface的編譯以及,最終在arm板子上執行seetaface編譯出來的可執行文件。
- 希望大家遇到報錯信息時,要冷靜查看問題根源,百度解決,雖然有的百度找不到直接答案,但是結合百度出來的多篇博客,會對你的報錯信息問題定位還是很有幫助的,結合分析,然后自己嘗試解決,我也是這樣走過來的。
- 你的點贊便是我的動力!!!