-2

Java コードで:

System.loadLibrary("twolib-second");

int  z = add(1, 2);

public native int add(int  x, int  y);

最初の.cpp:

#ifdef __cplusplus extern "C" {
#endif


using namespace std;


int first(int  x, int  y) {
    return x*10 + y; }

#ifdef __cplusplus }
#endif

秒.c:

//THIS IS THE source of trouble :)
//without the include of vector works just fine
//but after adding the include for vector code can't be compiled
#include <vector>
#include <jni.h>

jint
Java_com_example_jniexample_MainActivity_add( JNIEnv*  env,
                                      jobject  this,
                                      jint     x,
                                      jint     y )
{
    return first(x, y);
}

Android.mk:

LOCAL_PATH:= $(call my-dir)

# first lib, which will be built statically
#
include $(CLEAR_VARS)

LOCAL_MODULE    := libtwolib-first
LOCAL_SRC_FILES := first.cpp

include $(BUILD_STATIC_LIBRARY)

# second lib, which will depend on and include the first one
#
include $(CLEAR_VARS)

LOCAL_MODULE    := libtwolib-second
LOCAL_SRC_FILES := second.c

LOCAL_STATIC_LIBRARIES := libtwolib-first

include $(BUILD_SHARED_LIBRARY)

このエラーが発生し続けます:

jni/second.c:20 から: /home/username/dev/ndk/android-ndk-r9/sources/cxx-stl/stlport/stlport/stl/_relops_cont.h:6:1: エラー: 予想される '=' 、「、」、「;」、「asm」または「属性」を「<」トークンの前に/home/username/dev/ndk/android-ndk-r9/sources/cxx-stl/stlport/stlport/stl/_relops_cont. h:14:1: エラー: 予想される '='、','、';'、'asm' または ' attribute ' '<' トークン /home/username/dev/ndk/android-ndk-r9/sources/ cxx-stl/stlport/stlport/stl/_relops_cont.h:21:1: エラー: '<' トークン /home/username/ の前に'='、','、';'、'asm' または ' attribute ' が予想されますdev/ndk/android-ndk-r9/sources/cxx-stl/stlport/stlport/stl/_relops_cont.h:21:1: エラー:「=」、「,」、「;」、「asm」、または「属性」が必要です' before '<' token /home/username/dev/ndk/android-ndk-r9/sources/cxx-stl/stlport/stlport/stl/_relops_cont.h:21:1: error: expected '=', ', '、';'、'asm' または ' attribute ' '<' トークンの前 /home/username/dev/ndk/android-ndk-r9/sources/cxx-stl/stlport/stlport/stl/_relops_cont.h:21 :1: エラー: '<' トークンの前に'='、','、';'、'asm' または ' attribute ' が必要です /home/username/dev/ndk/android-ndk-r9/sources/cxx-stl /stlport/stlport/stl/_relops_cont.h:24:1: エラー: '='、','、';'、'asm' または '属性が必要です' before '<' token /home/username/dev/ndk/android-ndk-r9/sources/cxx-stl/stlport/stlport/vector:37:0 からインクルードされたファイル内、jni/second.c:20 から: /home/username/dev/ndk/android-ndk-r9/sources/cxx-stl/stlport/stlport/stl/_vector.h:752:10: エラー: '='、','、';'、 ' <' トークンの前の'asm' または ' attribute ' /home/username/dev/ndk/android-ndk-r9/sources/cxx-stl/stlport/stlport/stl/_vector.h:760:10: エラー: 予期される「=」、「,」、「;」、「asm」または「属性」が「<」トークンの前にある

Application.mk で

APP_STL := stlport_static

4

1 に答える 1

1

標準ライブラリをサポートしていないデフォルトの C++ ランタイムを使用していると思われます。

全体の情報については、ndk のインストール フォルダーにあるファイル docs/CPLUSPLUS-SUPPORT.html を参照してください。

を使用できるようにする (したがって、エラーなしでインクルードする)vectorには、Application.mk で定義する必要がありAPP_STLます。strlport または gnustl を使用して、次のようなものを追加することにより、ネイティブ Android 開発で標準ライブラリを有効にすることができます。

APP_STL := gnustl_static

別の問題: vectorC ファイルにインクルードしようとすると、機能しません。

于 2013-10-10T14:53:00.010 に答える