1

我在 OSX 的 Eclipse 中使用 NDK r8b 将 Java 和本机 JNI C++ 代码混合用于 android 项目。我希望能够在 std 命名空间中使用常规 C++ 类(映射、字符串)。

在 Android.mk 文件中添加了以下内容:

APP_STL := stlport_shared

在这里我也尝试了静态库。参考http://docs.huihoo.com/android/ndk/r5/CPLUSPLUS-SUPPORT.html

STLPORT_FORCE_REBUILD := 真

还尝试删除强制构建。

在 C/C++ 路径和变量中:

${NDKROOT}/sources/cxx-stl/stlport/stlport

“map”和“string”标头包含在 .cpp 文件中。我可以使用 std::string 和 std::map。助理接他们。搜索定义时(eclipse 中的 F3)会显示头文件,即已解析。此外,大纲显示了“字符串”和“地图”头文件,双击它们时,它也会将标题带到最前面。

但是,构建并没有选择它们。我得到以下信息:

> ndk-build
> Gdbserver      : [arm-linux-androideabi-4.6] libs/armeabi/gdbserver
> Gdbsetup       : libs/armeabi/gdb.setup
> Gdbserver      : [arm-linux-androideabi-4.6] libs/armeabi-v7a/gdbserver
> Gdbsetup       : libs/armeabi-v7a/gdb.setup
> Compile++ arm    : ImageTargets <= ImageTargets.cpp
> xxx/Project/Code/MyImageTarget/jni/ImageTargets.cpp:20:18: fatal error: string: No such file > or directory
> compilation terminated.
> make: *** [xxx/Project/Code/MyImageTarget/obj/local/armeabi/objs->    debug/ImageTargets/ImageTargets.o] Error 1

有谁知道还有什么可以尝试的。

4

1 回答 1

5

在命令行上使用V=1参数。ndk-build这将回显所有执行的命令,包括编译和链接,以及 NDK 构建分配的所有参数。

在您的情况下,可以在没有详细构建日志的情况下找到答案:

在 Android.mk 文件中添加了以下内容:

APP_STL := stlport_shared

这是你的错误。你引用的文件解释说这个设置应该进入Application.mk. 这个文件通常被认为是可选的。是的。APP_STL您可以在命令行上指定,而不是创建此文件:

ndk-build V=1 APP_STL=stlport_static

我不知道 Eclipse 为什么以及如何解析#include <string>映射

于 2012-10-28T21:36:09.167 回答