2013-03-22 51 views
0

当我在eclipse中构建我的Android ndk项目我得到以下错误引用使用std :: string作为参数的函数调用,如果我改变,我会得到一个类似的错误const char * arg。我怎样才能摆脱这种情况,我android.mk连接下面的错误:NDK构建未定义的参考...在方法调用

/Applications/adt-bundle-mac-x86_64/android-ndk-r8d/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi/objs/JsonPoco/JsonPoco.o: in function jsonParse:jni/JsonPoco.cpp:23: error: undefined reference to 'StoreRefListComplexType::StoreRefListComplexType(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)' 

Android.mk

LOCAL_PATH := $(call my-dir) 
ROOT_PATH := $(LOCAL_PATH) 
include $(call all-subdir-makefiles) 
include $(CLEAR_VARS) 
LOCAL_PATH = $(ROOT_PATH) 

include $(CLEAR_VARS) 
LOCAL_MODULE_TAGS := eng 
LOCAL_ARM_MODE := arm 
LOCAL_MODULE  := JsonPoco # Your own library. 
LOCAL_SRC_FILES := JsonPoco.cpp # Your own library source. 
LOCAL_CFLAGS  := -DPOCO_ANDROID -DPOCO_NO_FPENVIRONMENT -DPOCO_NO_WSTRING -DPOCO_NO_SHAREDMEMORY 
LOCAL_CPPFLAGS := -frtti -fexceptions 
LOCAL_STATIC_LIBRARIES := PocoFoundation \ 
PocoJSON 
include $(BUILD_SHARED_LIBRARY) 

而且我Application.mk

#Application.mk 
APP_STL := gnustl_static 

方法调用看起来像这样,其中test是std :: string:

void jsonParse(JNIEnv* aEnv, jobject aObj){ 
    std::string test= "jsondata..."; 
    ComplexType* ref = new ComplexType(test); 
} 

我已经采用的方法表中定义的我的jsonParse方法可达通过JNI:

static JNINativeMethod methodTable[] = { 
    {"json_parse", "()V", (void *) jsonParse}}; 

和recieving方法/构造:

ComplexType::ComplexType(std::string jsonstring); 
+1

没有源代码,我们不能帮你。 – Overv 2013-03-22 12:16:11

+0

添加了相关的代码片段。 – 2013-03-22 13:10:52

回答

0

此错误消息表示,一些源文件或库文件已经离开脱离make文件。在我的情况下,文件外壳:ComplexType包含在C++源代码中,但不包含在make脚本中。

显示类似的错误消息的另一个问题,但是缺少库的位置显示为here