Windows下使用NDK交叉编译ACE 6.2.0

基础阅读:

Windows环境下Android NDK环境搭建


一. 设置ACE的NDK交叉编译环境(ARM平台)

可以参考 NDK主目录下的<NDK>/docs/STANDALONE-TOOLCHAIN.html

1. 运行Cygwin Terminal

2. 生成NDK standalone toolchain交叉编译环境

cd $NDK
./build/tools/make-standalone-toolchain.sh --toolchain=arm-linux-androideabi-4.6 --arch=arm --platform=android-9 --install-dir=./sources/ACE-6.2.0/toolchain

./sources/ACE-6.2.0/toolchain是你交叉编译环境的复制路径,这个新生成的文件夹即是你的交叉编译环境

运行make-standalone-toolchain.sh时,有可能会报Permission denied的错误,解决方法:

方法一. 关掉Cygwin Terminal,再以管理员身份运行。

方法二. 当前用户没有对$NDK的完全管理权限,在$NDK目录上右击,点属性,在安全选项卡中为当前用户赋予完全控制的权限。

3. 关闭Cygwin Terminal

4. 编辑<cygwin>/home/<当前用户名>/.bash_profile。添加如下项:

#设置ACE的解压后的路径,此处将其解压至<NDK>/sources/ACE-6.2.0下
ACE_ROOT=$NDK/sources/ACE-6.2.0
export ACE_ROOT

#其实ANDROID_ARCH、SYSROOT不是必须的,在$(ACE_ROOT)/include/makeinclude/platform_android.GNU下有缺省定义
#其缺省值与此处定义的一样 
ANDROID_ARCH=arm
export ANDROID_ARCH
 
# android-9由你的android开发版本所定, 9为Androind2.3
SYSROOT=$NDK/platforms/android-9/arch-arm
export SYSROOT
 
PATH=$PATH:$NDK/sources/ACE-6.2.0/toolchain/bin
export PATH


二. 使用NDK编译ACE

可以参考:<ACE_ROOT>/ACE-INSTALL.html里的"Building and Installing ACE on Android"一节。

确认进行了()所提到的步骤

1.下载ACE包,并解压至<NDK>/sources/ACE-6.2.0

2 ace子目录新建文件config.h在其中添加

#ifndef __ACE_INLINE__
# define __ACE_INLINE__
#endif
#include "ace/config-android.h"

在有些情况下,使用的ACE的程序需要以__ACE_INLINE__进行编译,否则会有类似ACE_Thread_Mutex::acquire函数未定义的错误。因此我们在此处添加该宏。

3.在include/makeinclude子目录新建文件platform_macros.GNU,在其中添加

include $(ACE_ROOT)/include/makeinclude/platform_android.GNU

4. 编辑$(ACE_ROOT)/ace/Basic_Types.h,加入如下代码:

#if defined(ANDROID)
#  include <sys/endian.h>
#endif
由于在单独使用ace/ACE.h或ace/Basic_Types.h时,ACE对ACE_BYTE_ORDER的定义自相矛盾,所以此处在判断出是Android时,强行导入android下的大小头定义文件

5. 打开$(ACE_ROOT)/include/makeinclude/platform_android.GNU, 并加入如下代码:

CPPFLAGS += -DANDROID

6.打开Cygwin Terminal

cd $NDK/sources/ACE-6.2.0/ace
make

7. 编译完成后在$NDK/sources/ACE-6.2.0目录下创建一个名为Android.mk的文件,文件内容如下:

LOCAL_PATH:= $(call my-dir)
 
include $(CLEAR_VARS)
LOCAL_MODULE:= ACE
LOCAL_SRC_FILES:= lib/libACE.a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
include $(PREBUILT_STATIC_LIBRARY)

此处只列出了libACE.a。可以根据自己的需要调整自己的包含


三. 使用NDK编译基于ACE的应用程序

与建普通jni程序相同,但是在Android.mk中需加入-D__ACE_INLINE__宏,否则在示例代码中链接时会报:找不到ACE_Thread_Mutex::acquire。

代码见:NDK下使用ACE示例

 

你可能感兴趣的:(android,windows,cygwin,NDK,ACE)