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开发相关推荐

  1. Windows下Ionic Android开发环境搭建

    转自 http://www.itwap.net/ArticleContent.aspx?id=26 来源: itwap.net 作者: 词略 时间: 2015-4-2 16:57:28 (一)Ioni ...

  2. 如何在Windows下搭建Android开发环境

    搭建Android开发环境 1 下载Android SDK http://code.google.com/android/download.html 这是官方网址,进入后跟着流程走,选择适合于自己平台 ...

  3. 在Windows下搭建Android开发环境及遇到的问题

    转载1:http://www.cnblogs.com/xdp-gacl/p/4322165.html 转载2:http://www.cnblogs.com/zoupeiyang/p/4034517.h ...

  4. Windows下搭建Android开发环境

    新建项目时提示:proguard.cfg 系统找不到指定的文件  如图 解决方法: 方法一:在 android-sdk-windowstoolslib目录下新建proguard.cfg文件 内容如下: ...

  5. 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 ...

  6. c语言与qt编写安卓,Windows下Qt for Android 编译安卓C语言可执行程序

    作为 C/C++ 程序员,有时候我们希望在安卓上运行从 C/C++ 生成的可执行程序,而不是在 Java 中通过 jni 的方式来调用 C 动态库.有两个途径可以达到这个目的:一 作为 C/C++ 程 ...

  7. 在Windows环境下搭建Android开发环境

    标题:在Windows环境下搭建 Android 开发环境 作者:CrazyPebble 时间:2011年2月28日 声明:此文在参考其他网上资料以及笔者实践总结写下,一来自己可以做一些总结,二来给跟 ...

  8. Windows下编译Android安卓版QGroundcontrol

    目录 开发环境 QT安装 5.12.6 QT Android开发工具安装 QT配置 5.15.2 QT Android开发工具安装 开发环境 QGC版本: 4.1.4 Qt版本: 5.12.6(现官网 ...

  9. Windows 7 部署 Android 开发环境傻瓜式教程(Eclipse+ADT)

    我把该教程做成了一个PDF,网速慢的朋友可以在这里下载 http://files.cnblogs.com/vengen/AndroidSetup.zip 准备文件: WIN7 的安装方法与 XP 的安 ...

最新文章

  1. 倒计时3天!华为畅想未来智能车大赛报名即将截止,已报名选手请提交参赛PPT!
  2. 感恩节QAD带你“吃鸡”
  3. thinkphp3.2 验证码生成和点击刷新验证码
  4. 2.7 查阅文档 3.1 线性回归
  5. java calendar_Java Calendar getDisplayNames()方法与示例
  6. 【调研】在总体为n的情况下,多少样本有代表性?
  7. LeetCode58. 最后一个单词的长度
  8. 20210218:力扣第228周周赛(下)
  9. linux中级之防火墙的数据传输过程
  10. 为什么设置 height 100% 不起作用
  11. abp(net core)+easyui+efcore实现仓储管理系统——使用 WEBAPI实现CURD (十三)
  12. USB chirp信号测试
  13. DelphiXe3 FireMonkey 如何画图
  14. 武汉理工大学计算机考研专业代码,武汉理工大学代码及专业代码
  15. 10KV变配电增容工程电力监控系统的设计与应用
  16. linux的QQ安装在哪个文件夹,linux安装QQ
  17. ACM各题型OJ题目总结
  18. linux ppoe 动态ip,设置路由器时应该选择动态ip,静态ip还是pppoe拨号?
  19. Mstar平台_遥控器驱动
  20. https证书异常是什么意思?

热门文章

  1. Codeforces869B The Eternal Immortality
  2. 中国电子与IBM携手构建健康云平台;微软推3款机器学习工具;【软件网每日新闻播报│第9-26期】
  3. 前端面试题杂烩part1
  4. 计算机无法传送文件到打印机,发送文件给打印机却没反应?解决方案都在这里了...
  5. dedecms织梦后台登录一直提示验证码错误
  6. 什么是庖丁解牛的思维?
  7. 用JavaScript制作简单的网页计算器
  8. 【流媒体性能测试常用指标】
  9. 微星B550M MORTAR WIFI 的蓝牙模块消失的解决办法
  10. 计算机运维方向要考什么证,IT运维项目经理考的证