0

Eclipse内からAndroidndkプロジェクトをビルドすると、引数としてstd :: stringを使用した関数呼び出しを参照すると、次のエラーが発生します。constchar * argに変更すると、同様のエラーが発生します。どうすればこれを取り除くことができますか、私のandroid.mkはエラーの下に添付されています:

/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);
 }

メソッドテーブルを使用して、JNIを介して到達可能としてjsonParseメソッドを定義しました。

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

および受信方法/コンストラクター:

ComplexType::ComplexType(std::string jsonstring);
4

1 に答える 1

0

このエラー メッセージは、一部のソース ファイルまたはライブラリが make ファイルから除外されていることを示しています。私の場合、ファイル Housing: ComplexType は C++ ソースに含まれていましたが、make スクリプトには含まれていませんでした。

同様のエラー メッセージが表示される別の問題ですが、ライブラリが見つからない場合はここに表示されます。

于 2013-03-24T09:31:59.123 に答える