在代码中包含C ++预处理器指令--Android NDK

时间:2013-06-10 20:04:28

标签: android c++ android-ndk preprocessor-directive

Hello StackOverFlow专家,

我是Android编程的新手,不幸的是我在Android中的第一个项目涉及使用C ++库。这些是第三方库,必须使用它们。另外,我不熟悉C ++。我已经成功安装了Android SDK(v4.2.2和APIv 17)和NDK(android-ndk-r8e)。我能够编译C ++代码并构建eclipse项目,并看到我的Android设备上运行的应用程序。

但今天我了解到我必须编译一个C ++预处理器指令才能使某些功能正常工作。据我所知,C ++预处理器指令是在实际编译代码之前执行的。现在,感谢谷歌,我了解到执行预处理程序指令的方法是修改makeall.sh文件并执行以下操作:

ARCH="armeabi armeabi-v7a mips x86"
LIBDIR=../../mpcore/lib.android/libs

tmpdir=`mktemp -d /tmp/$0.XXXXX`

for arch in $ARCH; do
 /Users/Desktop/android-ndk-r8e/ndk-build LOCAL_CPPFLAGS:=-DUSE_ORIGINAL_BACKGROUND LOCAL_LDFLAGS=-L$LIBDIR/$arch APP_ABI=$arch
cp libs/$arch/libsample.so $tmpdir/libsample.so.$arch
done

for arch in $ARCH; do
 cp $tmpdir/libsample.so.$arch libs/$arch/libsample.so
done

rm -rf $tmpdir

其中USE_ORIGINAL_BACKGROUND是我的C ++指令的名称。

当我运行makeall.sh时,它编译得很好(至少我没有看到任何错误)。然后我打开我的eclipse项目,刷新它然后构建APK文件。但是,遗憾的是,我没有看到预期的结果。

所以我向所有人提问:我错过了什么吗?我修改makeall.sh的方式听起来对你不对吗?

对不起我,如果这个问题对你们来说非常基础,那么它将真正帮助我学习和学习Android的进步。提前谢谢大家

1 个答案:

答案 0 :(得分:1)

我解决了这个问题。似乎我需要从libs和obj文件夹中删除所有现有的已编译C ++代码。然后我刷新了eclipse项目,将APK文件复制到我的Android设备上,它就有效了!!!