windows下qt android开发
QT交叉编译gsl for android
- 写在前面
- 准备
- 步骤
- 打开msys GNU环境
- 制作工具链
- 编译库
- 环境变量脚本文件
- 编译
写在前面
此篇文章用于记录在将qt开发的基于桌面的程序移植到android过程中,遇到的第三方库gsl移植问题。
由于之前的开发只是简单的界面,移植非常简单,在qt编译时,选择不同的编译器即可,但当程序中使用了第三方开源库后,需要将库编译成与目标平台对应的库,才能编译运行,因此需要使用到交叉编译重新编译第三方库,之前并未接触过,不太熟悉脚本编译过程,感谢广大网友,百度搜索几天,才编译出正确的库。
准备
开发平台:windows
开发工具:qt5.9.9,安装时注意勾选android
windows下GNU环境:msys
GSL包:gsl-2.4
步骤
打开msys GNU环境
将msys复制到qt安装目录的mingw53_32文件夹下。然后运行msys目录下的msys.bat,即可打开GNU环境。如下图所示。
制作工具链
制作工具链参考链接
此处把脚本保存为make-toolchain.sh,将脚本文件放到ndk安装目录/build/tools目录下。
脚本说明如下:
DEV:android ndk安装目录的上一级目录
NDK_HOME:android ndk的安装目录
platform:从android ndk/platforms目录下选择一个即可。
–install-dir:修改为生成的各个架构工具链的存放位置
我修改后脚本文件如下。
#!/bin/shexport DEV=D:/Android
export NDK_HOME=${DEV}/android-ndk-r12bplatform=android-21
shmake=$NDK_HOME/build/tools/make-standalone-toolchain.sharchs=('arm''arm64''x86''x86_64''mips''mips64'
)toolchains=('arm-linux-androideabi-4.9''aarch64-linux-android-4.9''x86-4.9''x86_64-4.9''mipsel-linux-android-4.9''mips64el-linux-android-4.9'
)echo $NDK_HOME
num=${#archs[@]}
for ((i=0;i<$num;i++))
dosh $shmake --arch=${archs[i]} --platform=$platform --install-dir=D:/Android/chain/android_toolchain/${archs[i]} --toolchain=${toolchains[i]}
done
编译库
环境变量脚本文件
此处环境变量配置脚本参考的是以下链接[https://www.jianshu.com/p/e1f11178d826]
使用以下脚本,配置环境变量,保存为android-toolchain-env.sh,建议将该脚本文件放置到gsl文件夹下
DEV:ndk安装目录的上级目录
CHAIN_ENV:制作的工具链的存放目录
PREFIX:制作的工具链目录的上级目录
GCC_VER:ndk安装目录/toolchains下对应目标平台的版本
ANDROID_API:与制作工具链时使用的android platform的版本一致
ANDROID_ARCH:为目标平台架构,此处我使用的android平台架构为arm
ANDROID_TARGET:目标平台,此处我使用的是arm-linux-androideabi
TOOLCHAIN:工具链,此处我使用的是ndk目录下的toolchains文件夹下
LIBS:调用库,-lc是搜索libc标准c库,增加-lm是搜索libm的math库,因为gsl中用到了数学库中的函数,因此必须要增加-lm选项,否则,编译库会有错误,无法找到sin,cos等。
#!/bin/sh
# Android cross-compile environment setup script
# Author : eggsy
# Date : 2018-08-28
# Version : 1.0# Android NDK sources and standalone toolchain is put here
export DEV=/D/Androidexport CHAIN_ENV=${DEV}/chain/android_toolchain# All the built binaries, libs and their header will be installed here
export PREFIX=${DEV}/chain# Don't mix up .pc files from your host and build target
export PKG_CONFIG_PATH=${PREFIX}/lib/pkgconfig# GCC for Android version to use
# 4.9 is the only available version since NDK r11!
export GCC_VER=4.9# The building system we are using (Linux x86_64)
export BUILD_SYS=x86_64-linux-gnu# Set Android target API level
export ANDROID_API=21# Set Android target arch
export ANDROID_ARCH=arm# Set Android target name, according to Table 2 in
# https://developer.android.com/ndk/guides/standalone_toolchain.html
export ANDROID_TARGET=arm-linux-androideabi# The cross-compile toolchain we use
export TOOLCHAIN=arm-linux-androideabi# This is a symlink pointing to the real Android NDK r10e
export NDK=${CHAIN_ENV}/android-ndk-r12b# The path of standalone NDK toolchain
# Refer to https://developer.android.com/ndk/guides/standalone_toolchain.html
export NDK_TOOLCHAIN=${CHAIN_ENV}/${ANDROID_ARCH}# Set Android Sysroot according to API and arch
export SYSROOT=${NDK_TOOLCHAIN}/sysroot
# this one is the absolute, prebuilt path# Binutils path
export CROSS_PREFIX=${NDK_TOOLCHAIN}/bin/${TOOLCHAIN}
# this one is the absolute, prebuilt path# Non-exhaustive lists of compiler + binutils
export AR=${CROSS_PREFIX}-ar
export AS=${CROSS_PREFIX}-as
export LD=${CROSS_PREFIX}-ld
export NM=${CROSS_PREFIX}-nm
export CC=${CROSS_PREFIX}-gcc
export CXX=${CROSS_PREFIX}-g++
export CPP=${CROSS_PREFIX}-cpp
export CXXCPP=${CROSS_PREFIX}-cpp
export STRIP=${CROSS_PREFIX}-strip
export RANLIB=${CROSS_PREFIX}-ranlib
export STRINGS=${CROSS_PREFIX}-strings# Set build flags
# Refer to https://developer.android.com/ndk/guides/standalone_toolchain.html
export PATH=$PATH:${PREFIX}/bin:${PREFIX}/lib
export CFLAGS="--sysroot=${SYSROOT} -I${SYSROOT}/usr/include -I${PREFIX}/include -fPIE -DANDROID -Wno-multichar"
export CXXFLAGS=${CFLAGS}
export CPPFLAGS="--sysroot=${SYSROOT} -I${SYSROOT}/usr/include -I${NDK_TOOLCHAIN}/include/c++/ -DANDROID -DNO_XMALLOC -mandroid"
export LIBS="-lc -lm"
export LDFLAGS="-Wl,-rpath-link=-I${SYSROOT}/usr/lib -L${SYSROOT}/usr/lib -L${PREFIX}/lib -L${NDK_TOOLCHAIN}/lib"
编译
打开msys.bat,进入GNU环境,进入gsl-2.4目录,输入以下命令:
source android-toolchain-env.sh
./configure --host=${TOOLCHAIN} --prefix=/f/gsl-2.4/android-output
make -j8
make install
执行结束后,会在android-output文件夹下生成库文件,如下图所示。
其中lib文件下为qt工程中需要添加的库文件,添加libgsl.a和libgslcblas.a。
windows下qt android开发相关推荐
- Windows下Ionic Android开发环境搭建
转自 http://www.itwap.net/ArticleContent.aspx?id=26 来源: itwap.net 作者: 词略 时间: 2015-4-2 16:57:28 (一)Ioni ...
- 如何在Windows下搭建Android开发环境
搭建Android开发环境 1 下载Android SDK http://code.google.com/android/download.html 这是官方网址,进入后跟着流程走,选择适合于自己平台 ...
- 在Windows下搭建Android开发环境及遇到的问题
转载1:http://www.cnblogs.com/xdp-gacl/p/4322165.html 转载2:http://www.cnblogs.com/zoupeiyang/p/4034517.h ...
- Windows下搭建Android开发环境
新建项目时提示:proguard.cfg 系统找不到指定的文件 如图 解决方法: 方法一:在 android-sdk-windowstoolslib目录下新建proguard.cfg文件 内容如下: ...
- windows下 QT 的 Android 环境搭建(附软件测试)
windows下 QT for Android环境搭建 1. QT环境搭建 2. Android 环境搭建 2.1 JDK 2.2. NDK 2.3 SDK 3. 软件测试 3.1 QT自带 Scro ...
- c语言与qt编写安卓,Windows下Qt for Android 编译安卓C语言可执行程序
作为 C/C++ 程序员,有时候我们希望在安卓上运行从 C/C++ 生成的可执行程序,而不是在 Java 中通过 jni 的方式来调用 C 动态库.有两个途径可以达到这个目的:一 作为 C/C++ 程 ...
- 在Windows环境下搭建Android开发环境
标题:在Windows环境下搭建 Android 开发环境 作者:CrazyPebble 时间:2011年2月28日 声明:此文在参考其他网上资料以及笔者实践总结写下,一来自己可以做一些总结,二来给跟 ...
- Windows下编译Android安卓版QGroundcontrol
目录 开发环境 QT安装 5.12.6 QT Android开发工具安装 QT配置 5.15.2 QT Android开发工具安装 开发环境 QGC版本: 4.1.4 Qt版本: 5.12.6(现官网 ...
- Windows 7 部署 Android 开发环境傻瓜式教程(Eclipse+ADT)
我把该教程做成了一个PDF,网速慢的朋友可以在这里下载 http://files.cnblogs.com/vengen/AndroidSetup.zip 准备文件: WIN7 的安装方法与 XP 的安 ...
最新文章
- 倒计时3天!华为畅想未来智能车大赛报名即将截止,已报名选手请提交参赛PPT!
- 感恩节QAD带你“吃鸡”
- thinkphp3.2 验证码生成和点击刷新验证码
- 2.7 查阅文档 3.1 线性回归
- java calendar_Java Calendar getDisplayNames()方法与示例
- 【调研】在总体为n的情况下,多少样本有代表性?
- LeetCode58. 最后一个单词的长度
- 20210218:力扣第228周周赛(下)
- linux中级之防火墙的数据传输过程
- 为什么设置 height 100% 不起作用
- abp(net core)+easyui+efcore实现仓储管理系统——使用 WEBAPI实现CURD (十三)
- USB chirp信号测试
- DelphiXe3 FireMonkey 如何画图
- 武汉理工大学计算机考研专业代码,武汉理工大学代码及专业代码
- 10KV变配电增容工程电力监控系统的设计与应用
- linux的QQ安装在哪个文件夹,linux安装QQ
- ACM各题型OJ题目总结
- linux ppoe 动态ip,设置路由器时应该选择动态ip,静态ip还是pppoe拨号?
- Mstar平台_遥控器驱动
- https证书异常是什么意思?
热门文章
- Codeforces869B The Eternal Immortality
- 中国电子与IBM携手构建健康云平台;微软推3款机器学习工具;【软件网每日新闻播报│第9-26期】
- 前端面试题杂烩part1
- 计算机无法传送文件到打印机,发送文件给打印机却没反应?解决方案都在这里了...
- dedecms织梦后台登录一直提示验证码错误
- 什么是庖丁解牛的思维?
- 用JavaScript制作简单的网页计算器
- 【流媒体性能测试常用指标】
- 微星B550M MORTAR WIFI 的蓝牙模块消失的解决办法
- 计算机运维方向要考什么证,IT运维项目经理考的证