1

変数が x と定義されているヘッダー ファイル header.h があります。

#変数 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 コードであり、共有 lib .so を作成して Android Java コードにロードしています。最近、コードのバグを知るようになりました。解決策は、変数値を x に動的に定義することです。この値を ANdroid から JNI に渡す以外に、Android Java でマクロを直接 #define できる方法があります。C の MACRODEFINED_FROM_ANDROID 言語と言うと、ヘッダー ファイルは次のようになります。

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

他の解決策は、変数 = x と変数 = y を持つ 2 つの共有ライブラリを作成し、それを Android コードに動的にロードすることです。

PLzが提案します。

Rgds、サウラブ

4

1 に答える 1

0

this によると、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 に答える