无法解析类型'std :: string'。

时间:2013-09-17 08:13:27

标签: android c++ android-ndk native

我开始在Android中以原生c ++移植一些Java代码。我在c ++中使用字符串时遇到了问题:

Type 'std::string' could not be resolved

有我的示例代码

#include <jni.h>
#include <lexu_me_test_native.h>
#include <string.h>
using namespace std;

JNIEXPORT jstring JNICALL Java_lexu_me_test_native_prepairToShowNative
  (JNIEnv * env, jclass javaThis, jstring str)
{
    jboolean blnIsCopy;
    jstring jstrOutput;
    char* strCOut;
    std::string ss;

    const char* strCIn = (env)->GetStringUTFChars(str , &blnIsCopy);
    // convert jstring to a char array
    // Do stuff with the char array and and store the result
    // in another char array strCOut
    (env)->ReleaseStringUTFChars(str , strCIn); // release jstring

    jstrOutput = (env)->NewStringUTF(strCOut); // convert char array to jstring
    return jstrOutput;
}

Android.mk文件:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := native
LOCAL_SRC_FILES := native.cpp

include $(BUILD_SHARED_LIBRARY)

Application.mk文件:

APP_STL := stlport_static

MinGW已安装并添加到路径中。我尝试使用android-ndk-r8e和android-ndk-r8-crystax-1没有任何帮助。在Cygwin Terminal错误:

Compile++ thumb  : native <= native.cpp
jni/native.cpp: In function '_jstring* Java_lexu_me_test_native_prepairToShowNative(JNIEnv*, jclass, jstring)':
jni/native.cpp:11:2: error: 'string' was not declared in this scope
jni/native.cpp:11:9: error: expected ';' before 'ss'

我正在使用Win 7 64bit。有谁能说它怎么解决? 感谢。

修改

在C / C ++中 - 路径和符号已设置:C:\ Android \ android-ndk-r8e \ platforms \ android-14 \ arch-arm \ usr \ include

2 个答案:

答案 0 :(得分:1)

如果其他答案无效,请尝试以下步骤:

  1. 如果您有using namespace std;,请使用string代替std::string
  2. 如果#include <string>无效并且您正在使用Linux,请尝试#include <unistd.h>。如果您正在使用其他操作系统,请使用#include <cstdlib>

答案 1 :(得分:-1)

检查您的Android.mkApplication.mk文件。确保选择STL库并在Application.mk文件中包含int:

Application.mk: APP_STL := gnustl_static

(gnustl_static)可以替换为您想要的STL版本,STLPort仍然是一个选项

请参阅http://www.kandroid.org/ndk/docs/CPLUSPLUS-SUPPORT.html