3

我已经开始在 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)

应用程序.mk 文件:

APP_STL := stlport_static

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

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 64 位。谁能说说怎么解决?谢谢。

编辑。

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

4

2 回答 2

1

如果其他答案不起作用,请尝试以下步骤:

  1. 如果有using namespace std;,请使用string代替std::string.
  2. 如果#include <string>不起作用并且您使用的是 Linux,请尝试#include <unistd.h>. 如果您使用的是其他操作系统,请使用#include <cstdlib>.
于 2013-09-17T08:53:26.603 回答
-1

检查您的Android.mkApplication.mk文件。确保您选择一个 STL 库并包含 intApplication.mk文件:

Application.mk: APP_STL := gnustl_static

(gnustl_static) 可以换成你想要的STL版本,STLPort还是一个选项

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

于 2014-03-07T20:45:48.940 回答