海思平台配置toolchain.cmake
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了海思平台配置toolchain.cmake相关的知识,希望对你有一定的参考价值。
参考技术A 交叉编译,在我们的host宿主机器上需要生成target目标机器的程序, 使用CMake的Toolchain管理这里的各种环境变量和配置,就很好.CMake给交叉编译预留了一个变量-- CMAKE_TOOLCHAIN_FILE , 它定义了一个文件的路径, 这个文件就是 toolchain ,我们可以在里面配置 C_COMPILER , CXX_COMPILER ,如果用Qt的话需要更改 QT_QMAKE_EXECUTABLE 以及如果用 BOOST 的话需要更改的 BOOST_ROOT (具体查看相关 Findxxx.cmake 里面指定的路径), 因此,这个 toolchain 内嵌了一系列需要改变并且需要set的交叉环境的设置.
下面归纳一些比较重要的:
下面是一个常规的配置
这样就完成了相关toolChain的编写,之后,你可以灵活的选择到底采用宿主机版本还是开发机版本,之间的区别仅仅是一条 -DCMAKE_TOOLCHAIN_FILE=./cross.toolChain.cmake ,更爽的是,如果你有很多程序需要做转移,但目标平台是同一个,你仅仅需要写一份toolChain放在一个地方,就可以给所有工程使用。
稍微大一点的项目都会用到一些外部依赖库或者tool,CMake提供了 FIND_PROGRAM() , FIND_LIBRARY() , FIND_FILE() , FIND_PATH() and FIND_PACKAGE() 等命令来进行外部依赖的搜索查找。
但是有个问题,假如我们在给一个ARM处理器的移动设备做交叉编译,其中需要寻找 libjpeg.so ,假如 FIND_PACKAGE(JPEG) 返回的是 /usr/lib/libjpeg.so ,那么这就会有问题,因为找到的这个 so 库只是给你的宿主机系统(例如一个x86的Ubuntu主机)服务的,不能用于Arm系统。所以你需要告诉CMake去其它地方去查找,这个时候你就需要配置以下的变量了:
在工程中一般通过如下步骤, 进入工程文件, 创建 arm-himix200-linux.cmake 文件, 内容是:
然后创建build文件夹, 进行编译(注意, 需要指定 CMAKE_MAKE_PROGRAM , 不指定的话好像编译有问题...):
在我的 toolchain 文件中,我指定:
因为我项目中 CMakeLists.txt 中需要查找 OpenSSL 和 curl , 因此会用到CMake自带的 FindOpenSSL.cmake 和 FindCurl.cmake 两个脚本, 他们会用到 Findxxx 命令, 会去我指定的目录去搜索对应的库
https://www.cnblogs.com/rickyk/p/3875334.html
http://www.cmake.org/Wiki/CMake_Cross_Compiling
海思QT开发系列:3559平台QT移植
参考
网上的版本大都不完善,或多或少会出一些错误,所以
一切以我为准!
环境
主机环境:Ubuntu 16.04;
板端:hi3559av100
交叉编译环境:aarch64-himix100-linux-
没环境的同学参考 hisi SDK安装记录虽然是3518EV200为例,但海思sdk都差不多是一个框架,不要慌
下载
本文以最新QT版本5.14.2为例
qt-everywhere-src-5.14.2.tar.xz
其他QT版本选择
ps:
用迅雷下载会比较快
移植
解压
tar xvf qt-everywhere-src-5.14.2.tar.xz
config修改
- 进入目录
cd qt-everywhere-src-5.14.2/qtbase/mkspecs/
- 复制一份aach配置
cp linux-aarch64-gnu-g++/ linux-aarch64-himix100-g++/ -r
- 修改配置,将qmake.conf文件的编译器“aarch64-linux-gnu”全部替换为“aarch64-himix100-linux”
-
cd linux-aarch64-himix100-g++/
-
vim qmake.conf
QT配置,生成Makefile
回到根目录qt-everywhere-src-5.14.2$/执行:
./configure -release -opensource -confirm-license -make libs -xplatform linux-aarch64-himix100-g++ -prefix $PWD/qt5.9.7_hi3559av100_release -no-opengl -no-ico -strip -shared -nomake examples -no-sse2 -nomake tests -nomake tools -no-iconv
-no-iconv 去掉字符转换,不加会有如下错误
QIconvCodec::convertToUnicode: using Latin-1 for conversion,iconv_open failed
QIconvCodec::convertFromUnicode: using Latin-1 for conversion,iconv_open failed
- -xplatform 代表平台,注意需要有对应的qmake.conf
- -prefix 指定安装目录
- -no-iconv
- -no-ico 不支持图标、3559不需要,不是单独的应用
- -strip 减小体积
- -shared 动态库
- -nomake examples 不编译example等相关模块
./configure --help查看其他配置,自行选择,如果flash有限的话可以慢慢裁剪,3559不需要,哈哈哈哈
编译
这个没什么好说的
-
make -j$(nproc)
-
make install
$(nproc) 代表你的核心个数,多核编译会快一些,如果配置一般,make后建议去吃个饭什么的
编译结束
bin 工具相关,下一节会用到
lib
plugins
qml
创作不易,欢迎点赞!海星原创,转载请注明出处!
版权声明:本文为haysonzeng原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:海思QT开发系列(一):Hi3559平台QT移植_一只海星的博客-CSDN博客_海思qt
以上是关于海思平台配置toolchain.cmake的主要内容,如果未能解决你的问题,请参考以下文章