在window下用android-ndk编译android下可执行程序的方法。

环境,win7,与android-ndk-r13b-windows-x86_64,把android-ndk-r13b-windows-x86_64解压在目当中就可,不用安装

1,只用gcc工具

D:\android-ndk\android-ndk-r13b\toolchains\arm-linux-androideabi-4.9\prebuilt\windows-x86_64\bin\arm-linux-androideabi-gcc --sysroot=D:\android-ndk\android-ndk-r13b\platforms\android-9\arch-arm -o test test.cpp

因为没有环境变量用了全路径,实际上是找到android-ndk-r13b下的相应于目示平台的工具目录,内有GNU的一些工具。--sysroot指示了用到的示准库。

test.cpp 内容是
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main (int argc, char *argv[])
{

    fprintf(stderr, "this is a test...\n");

    return 0;
}

2,用ndk-build脚本工具,它会依同目录下的Android.mk文件的配置,调用相应的gcc 做编译。在换目标平台时方便少一点。

因为默认的目录原因,在运行ndk-build下建jni目录。下面加入三个文件:test.cpp,Android.mk,Application.mk

Android.mk内容是

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := test
LOCAL_SRC_FILES := test.cpp
include $(BUILD_EXECUTABLE)

Application.mk是

APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -fexceptions
APP_ABI :=armeabi

文件准后后,在目标下直接用ndk-build就可以。然后adb push到目标平台,chmod 后./test.可以看一下结果

3,用CMake

用Cmake 就要用到Ninja这个工具,Cmake就是为了让编译各用平台更方便。但Cmake自已的配置也不少。最简的例子,需要的文件有:test.cpp build.bat , CMakeLists.txt

build.bat 是因为调用Cmake,交叉骗译用到选项多,所以写成脚本。 CMakeLists.txt主要是给最后的编译器指示编译选项用的,但这里的写法,与最好gcc用到选项写法不一样。它有一个通一的写法,通过CMAKE编生成基它工具可通知的配置。如生成ninja可用的build.ninja文件。

set toolchain=D:/android-ndk/android-ndk-r13b/build/cmake/android.toolchain.cmake
set android_ndk=D:/android-ndk/android-ndk-r13b
set build_type=Release
set gernerator="Ninja"
if not exist %1 md %1
cd %1
::cmake .. -DCMAKE_TOOLCHAIN_FILE=%toolchain% -DANDROID_NDK=%android_ndk% -DCMAKE_BUILD_TYPE=%build_type% -DANDROID_ABI="%1" -DCMAKE_GENERATOR=%gernerator%
cmake .. -DCMAKE_TOOLCHAIN_FILE=%toolchain%  -DCMAKE_BUILD_TYPE=%build_type% -DANDROID_ABI="%1" -DCMAKE_GENERATOR=%gernerator%
ninja
cd ..

 CMakeLists.txt

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
PROJECT(HELLO)
SET(SRC_LIST test.cpp)
INCLUDE_DIRECTORIES(
include
)
AUX_SOURCE_DIRECTORY(src DIR_SRCS)
ADD_EXECUTABLE(hello ${SRC_LIST})
 

在目示下运行脚本就可以生成目标了。如果中间出错删去自动生成的文件,找原因再重试,不删去自动生成的文件,新的选项可能不会启作用。ninja的路径要加入的系统path,要不cmake会找不到,同目示下也会找不到。

Cmake的选项很多,在大工程中,要把不同的编译工具,组合在一起用时,很实用。Cmake面向每一种编译工具集时,所用的选项都不太一样。需要自已对编译工具了解,再看看cmake的说明去决定。

这里的只是初步,看不出Cmake的功能,反而感觉繁琐。

CMake只是编译工具。gradle引入了版本依赖。这些东西,对只开发小程序,没用混合编程,只是感到繁琐。

 

发布了62 篇原创文章 · 获赞 6 · 访问量 8万+
展开阅读全文

编译ndk-build.cmd生成.so文件中出现这样的问题,不知道哪的原因。

05-29

E:\project\CHENWEN\proj.android\jni>ndk-build [armeabi] Compile++ thumb: cocos2dcpp_shared <= main.cpp In file included from D:/android-ndk-r10/sources/cxx-stl/gnu-libstdc++/4.6/inclu de/thread:35:0, from E:/project/CHENWEN/proj.android//jni/../../cocos2d/cocos/3 d/../base/CCConsole.h:42, from E:/project/CHENWEN/proj.android//jni/../../cocos2d/cocos/3 d/../base/ccMacros.h:35, from E:/project/CHENWEN/proj.android//jni/../../cocos2d/cocos/3 d/../base/CCRefPtr.h:30, from E:/project/CHENWEN/proj.android//jni/../../cocos2d/cocos/3 d/../cocos2d.h:42, from E:/project/CHENWEN/proj.android//jni/../../Classes/AppDele gate.h:4, from E:/project/CHENWEN/proj.android//jni/hellocpp/main.cpp:1: D:/android-ndk-r10/sources/cxx-stl/gnu-libstdc++/4.6/include/bits/c++0x_warning. h:32:2: error: #error This file requires compiler and library support for the IS O C++ 2011 standard. This support is currently experimental, and must be enabled with the -std=c++11 or -std=gnu++11 compiler options. In file included from E:/project/CHENWEN/proj.android//jni/../../cocos2d/cocos/3 d/../platform/CCGL.h:36:0, from E:/project/CHENWEN/proj.android//jni/../../cocos2d/cocos/3 d/../base/ccTypes.h:36, from E:/project/CHENWEN/proj.android//jni/../../cocos2d/cocos/3 d/../cocos2d.h:51, from E:/project/CHENWEN/proj.android//jni/../../Classes/AppDele gate.h:4, from E:/project/CHENWEN/proj.android//jni/hellocpp/main.cpp:1: E:/project/CHENWEN/proj.android//jni/../../cocos2d/cocos/3d/../platform/android/ CCGL-android.h:44:31: fatal error: GLES2/gl2platform.h: No such file or director y compilation terminated. make.exe: *** [E:/project/CHENWEN/proj.android//obj/local/armeabi/objs/cocos2dcp p_shared/hellocpp/main.o] Error 1 问答

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览