- PC操作系统:VMWare虚拟机上的Ubuntu 20.04 LTS (x86_64)
- OpenCV版本:3.3.1(已提供)
- T7源码:t7_offer.tar.gz(已提供)
- 目标平台:全志T7
- 编译时间:2021.08.26
一、T7源码设置
1、解压t7_offer.tar.gz
sudo tar -zxvf t7_offer.tar.gz //找个文件位置解压
2、进入\t7_v1.2.0rls\doc找到《T7_LinuxSDK使用手册_V1.4.pdf》并打开,找到3.1.4小节,按照说明安装编译SDK所需要的软件包:
出现错误:E: 无法定位软件包 mingw32
解决方法:
//此时需要打开下载源文件sources.list 即
sudo gedit /etc/apt/sources.list
//在sources.list末尾添加语句并保存退出
deb http://us.archive.ubuntu.com/ubuntu trusty main universe
//再次更新安装即可
sudo apt-get update
sudo apt-get install mingw32
3、修改Makefile文件,将LICHEE_DIR修改成本地的路径。找到之前编译过的工程文件\pro\t7-test\as_avs,用VS CODE打开,在Makefile工程中修改如下信息:
红色圈住部分 是需要点击修改的地方,LICHEE_DIR位置为解压的T7源码位置,TARGET是交叉编译后的可执行程序的名字。
黄色部分是在后面cmake设置时编译器中gcc、g++的位置路径。
二、OpenCV设置
1、解压OpenCV源码到某一目录
2、安装cmake及其他依赖库
sudo apt-get install cmake
sudo apt-get install 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源码目录,新建build-arm文件
cd ~\opencv3.3.1
mkdir build-arm
cd build-arm
sudo cmake-gui
4、cmake设置
source code源码:选择解压出来的opencv目录
build the binaries编译目录:选择刚才创建build文件夹
继续配置生成目标选项:
配置两项: Unix Makefiles 、Specify options for cross-compiling
继续配置编译器
Operating System操作系统:arm-linux
编译器C:选择交叉编译器的gcc,如我的arm-linux-gcc【注意:上图地址有误,应与第一节提到的黄色方框标注相同】
编译器C++:选择交叉编译器的g++,如我的arm-linux-g++
Target Root:选择交叉编译器的bin目录
完成,点击Finish。
修改指定编译的内容、路径等信息
修改配置安装目录:找到CMAEK_INSTALL_PREFIX,将默认的/usr/local修改为新建的目录,该操作目的是方便管理交叉编译后的库,若用默认的/usr/local,交叉编译后的库会替换它,以后将不可再用。
勾上BUILD_JPEG 和BUILD_PNG (此2项可选)。去掉WITH_WEBP、WITH_TIFF等(根据实际使用情况选择)。
配置完成,再次点击Configure,点Generate,生成Makefile。完成关闭界面。
5、编译
进入编译目录(即之前的build-arm文件),对CMakeCache.txt进行修改,如下:
cd ~/opencv3.3.1/build-arm
sudo gedit CMakeCache.txt //打开CMakeCache.txt做以下修改
//找到
CMAKE_CXX_FLAGS:STRING
CMAKE_C_FLAGS:STRING
CMAKE_EXE_LINKER_FLAGS
//修改如下
CMAKE_CXX_FLAGS:STRING =-fPIC -pthread -lrt -ldl
CMAKE_C_FLAGS:STRING=-fPIC -pthread -lrt -ldl
CMAKE_EXE_LINKER_FLAGS:STRING=-fPIC -pthread -lrt -ldl
//-pthread支持线程(gcc编译使用了POSIX thread程序通常需要增加额外的选项);-ldl避免未定义dlopen(加载动态链接库);-lrt避免未定义(链接添加实时库(rt: real time))
开始编译、安装
sudo make
//make编译成功后,安装OpenCV
sudo make install
三、问题解决
问题可能包括:缺乏相关的依赖库、找不到对应的文件
1、出现#error "No suitable threading library available."错误
参考Tina openwrt平台下opencv交叉编译-huangea的博客
解决方法:找到opencv-3.4.0/3rdparty/protobuf/src/google/protobuf/stubs/common.cc文件,在该文件加上该句宏定义#define HAVE_PTHREAD,再重新编译。