NDK - Android Java with native (JNI) C++ code build issue

假如想象 提交于 2019-12-13 00:44:02

问题


I am using a mix of Java and native JNI C++ code for an android project, using NDK r8b, in Eclipse in OSX. I want to be able to use the regular C++ classes (map, string) in std namespace.

In the Android.mk file the following were added:

APP_STL := stlport_shared

Here I also tried static library. Refer to http://docs.huihoo.com/android/ndk/r5/CPLUSPLUS-SUPPORT.html

STLPORT_FORCE_REBUILD := true

Also tried removing the forced build.

In the C/C++ path and variables:

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

"map" and "string" headers were included in the .cpp file. I am able to use std::string and std::map. The assistant picks up on them. When searching for the definition (F3 in eclipse) the header file is shown, i.e. resolved. Also, the outline shows the "string" and "map" header files and when double clicking them it also brings the headers to the forefront.

However, the build doesn't pick them up. I get the following:

> 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

Has anyone any idea what else is there to try.


回答1:


Use V=1 parameter on ndk-build command line. This will echo all executed commands, including compilation and link, with all their parameters that NDK build assigns.

In your case, the answer can be found without detailed build log:

In the Android.mk file the following were added:

APP_STL := stlport_shared

This is your mistake. The document you cited explains that this setting should go into Application.mk. This file is usually considered optional. Yes it is. Instead of creating this file, you can specify APP_STL on the command line:

ndk-build V=1 APP_STL=stlport_static

I don't know why and how Eclipse resolves #include <string> or map.



来源:https://stackoverflow.com/questions/13107104/ndk-android-java-with-native-jni-c-code-build-issue

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!