从Android代码定义C宏

时间:2012-04-10 12:15:59

标签: android c macros java-native-interface

我有一个头文件header.h,其中变量定义为x。

#define variable X

基于变量x我在c文件中有一个结构y - program.c:

#include header.h

Structure y 
{
int val[variable];
.
.
//other elements

}


void func()
{
//here instance of y->val[variable] is used heavily

}

这个c代码(header.h和program.c)是一个JNI代码,我正在创建一个共享库.so并将其加载到Android java代码中。 最近我开始知道我的代码中的一个错误,解决方案是动态地将变量值定义为x。 现在除了将这个值从ANdroid传递给JNI之外,还有一种方法可以直接#define在Android中定义一个宏,用C表示MACRODEFINED_FROM_ANDROID语言 以便在头文件中变成这样:

#ifdef MACRODEFINED_FROM_ANDROID
#define variable x
#elif
#define variable y
#endif 

其他解决方案是我将创建两个共享库,其中一个变量= x,另一个变量= y,并在android代码中动态加载它。

PLz建议。

RGDS, SAURABH

1 个答案:

答案 0 :(得分:0)

根据这个,有一些宏可以帮助你测试你是否正在为android编译

http://annoyingtechnicaldetails.wordpress.com/2012/02/01/which-macros-does-the-android-ndk-gcc-define/

在我的系统上:

# $CC  -dM -E - < /dev/null | grep -i android
#define __ANDROID__ 1
# echo $CC
android-ndk-r7b//toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin//arm-linux-   androideabi-gcc --sysroot=platforms/android-9/arch-arm