暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL 移植编译(二)配置交叉编译环境

上下博客 2021-04-21
1469
在想要移植一些Linux程序到Android上的时候,虽然都是Linux,但是有可能会出现无法运行的情况,这种情况下就需要交叉编译也就是用安卓提供的编译工具进行编译。

在以前这种移植相对麻烦一些,但是现在非常简单,网上文章有些过时,所以这里写一篇算是入门也算是相关移植章节的开篇。


安装NDK工具链
官网
https://developer.android.google.cn/ndk

选择一个合适的版本下载,这里我下载的是:android-ndk-r22-linux-x86_64.zip

配置
vim ~/.bashrc && source  ~/.bashrc
    $ vim ~/.bashrc
    # .bashrc
    # User specific aliases and functions


    alias rm='rm -i'
    alias cp='cp -i'
    alias mv='mv -i'
    # Source global definitions
    if [ -f etc/bashrc ]; then
    . etc/bashrc
    fi

    在最后位置加入下面两行:

      export NDKROOT=/android-ndk/ndk/android-ndk-r22
      export PATH=$NDKROOT:$PATH

      注意这里的:/android-ndk/ndk/android-ndk-r22是你解压的路径。

      然后运行:source ~/.bashrc (或者重启电脑)

      效验
      ndk-build
        $ ndk-build
        Android NDK: Could not find application project directory !
        Android NDK: Please define the NDK_PROJECT_PATH variable to point to it.
        /android-ndk/ndk/android-ndk-r22/build/core/build-local.mk:151: *** Android NDK: Aborting .  Stop.


        出现上述内容代表成功


        Android.mk
        解释
        MakeFile文件

        用于向构建系统描述源文件和共享库。它是一个微小的GNU makefile 片段,构建系统会将其解析一次或多次。提供了一些变量、宏、函数用于对项目进行编译。

        例子
        LOCAL_PATH 

        Android.mk文件必须先定义一个LOCAL_PATH变量,这个变量指向你的项目路径,编译器在读取Android.mk文件的时候会先读取LOCAL_PATH变量,从中获取项目路径。然后在读取项目文件进行编译。

        赋值
        LOCAL_PATH := $(call my-dir)

        这里的my-dir代表的是当前目录


        Application.mk
        解释
        Application.mk

        用于配置目标 ABI、工具链、发布/调试模式和 STL 的文件,内部定义了一些变量,可以进行上述功能的一些指定。比如:ABI

        ABI
        ABI全称:Application binary interface(应用程序二进制接口),定义了一套规则,允许编译好的二进制目标代码能在所有兼容该ABI的操作系统中无需改动就能运行。 

        大致相当于CPU指令集,由于安卓开源,碎片化严重。导致有很多指令架构的手机出现,比如:arm、x86_64等。而配置Application.mk文件,可以为我们指定生成的文件是运行在哪个平台上的。

        生成对应架构
        APP_ABI := x86

        上述代码就指定了生成的文件属于什么架构,这里指定了:x86


        hello-ndk
        C文件
        ndk.c
          #include <stdio.h>
          int main(){
          printf("android.jni\n");
          return 0;
          }


          MK文件

          Android.mk

            LOCAL_PATH := $(call my-dir)
            LOCAL_MODULE := hello-ndk
            LOCAL_SRC_FILES := ndk.c
            include $(BUILD_EXECUTABLE)
            MK文件
            Application.mk
              APP_ABI := x86
              编译(新版)
               ①:需要指定目录 ②:指定mk文件
                ndk-build NDK_PROJECT_PATH=. NDK_APPLICATION_MK=Application.mk APP_BUILD_SCRIPT=Android.mk

                然后就会出现如下内容

                  Android NDK: APP_PLATFORM not set. Defaulting to minimum supported version android-16. 

                  [x86] Compile : hello-ndk <= ndk.c
                  [x86] Executable : hello-ndk
                  [x86] Install : hello-ndk => libs/x86/hello-ndk

                  代表编译成功

                  运行
                  上传至安卓手机

                  如果查看文件的结构,会发现其中带有Android的标识。




                  文章转载自上下博客,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                  评论