IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> windows下qt android开发 -> 正文阅读

[移动开发]windows下qt android开发

写在前面

此篇文章用于记录在将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/sh

export DEV=D:/Android
export NDK_HOME=${DEV}/android-ndk-r12b

platform=android-21
shmake=$NDK_HOME/build/tools/make-standalone-toolchain.sh

archs=(
    '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++))
do
   sh $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/Android

export 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。
在这里插入图片描述

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-01-08 14:08:36  更:2022-01-08 14:08:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 10:48:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码