1

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

#定义变量X

基于变量 x 我在 ac 文件中有一个结构 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。现在除了将这个值从 AAndroid 传递给 JNI 之外,还有一种方法可以直接在 Android java 中#define 一个宏,比如 C 的 MACRODEFINED_FROM_ANDROID 语言,这样头文件就变成了这样:

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

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

PLz建议。

Rgds,索拉布

4

1 回答 1

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
于 2012-04-17T08:09:55.870 回答