androidndk和eclipse给出了关于c++getline()函数的不同错误信息

android ndk and eclipse give different error info about a c++ getline() function

本文关键字:函数 信息 错误 c++getline eclipse androidndk      更新时间:2023-10-16

我在android JNI下有一些c++代码,当我在命令行下使用ndk构建时,它可以生成.so-libfile,但当我的项目作为android应用程序运行时,eclipse会提醒我关于getline()函数的一些错误,它告诉我必须首先修复错误。所以我很困惑。

我的getline()函数在这里使用:

extern "C" JNIEXPORT int JNICALL Java_com_android_mymapsforge_create(JNIEnv *env, jobject obj)
{
    ifstream infile("C:\Users\li\Documents\Visual Studio 2010\Projects\importANN\Debug\nodes.csv");
    string line;
    int index = 0;
   while( getline( infile, line ))
   {
         ...
   }
}

给定的getline()信息为:无效参数'候选人是:std::basic_istream<0,#1>&getline(std::basic_stream<#0,#1>&,std::basic_string<+0,#1,#2>&std::basic_istream<0,#1>&getline(std::basic_stream<#0,#1>&,std::basic_string<#0,#1,#2>&#0)

但事实上,android ndk已经成功构建了c++代码:查看控制台信息:

Build of configuration Default for project MyMapsforge
C:TDDOWNLOADadt-bundle-windows-x86_64-20130729ndkandroid-ndk-r9ndk-build.cmd all 
Android NDK: WARNING: APP_PLATFORM android-14 is larger than android:minSdkVersion 8 in ./AndroidManifest.xml    
Install        : libann.so => libs/armeabi/libann.so
Install        : libann.so => libs/armeabi-v7a/libann.so
**** Build Finished ****

y粘贴的这个函数包含在我的android.mk c++文件中

查看我的android.mk文件:

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../ 
LOCAL_MODULE    := libann
LOCAL_LDLIBS    := -llog
NDK_TOOLCHAIN_VERSION := clang
LOCAL_CPPFLAGS += -std=c++11
LOCAL_SRC_FILES := 
    ANN.cpp 
    bd_pr_search.cpp 
    bd_tree.cpp 
    kd_pr_search.cpp 
    kd_split.cpp 
    kd_util.cpp 
    bd_fix_rad_search.cpp 
    bd_search.cpp 
    brute.cpp 
    kd_fix_rad_search.cpp 
    kd_search.cpp 
    kd_tree.cpp 
    kd_dump.cpp 
    perf.cpp
    sample.cpp
include $(BUILD_SHARED_LIBRARY)

sample.cpp包含我粘贴的函数,它使用了getline()函数。所以我很困惑,怎么解决这个问题。

Eclipse提醒它包含错误,因此我无法运行该项目。

当您遇到Eclipse中的这些错误消息时,只需转到"Problems"视图并删除这些消息。清除生成项目,消息将不会再次出现。请注意,根据手册,NDK_TOOLCHAIN_VERSION应在Application.mk中指定。此外,您必须为您的项目指定APP_STL,此设置也可在Application.mk中进行。

有关说明,请参见NDK CPLUPLUS-SUPPORT.html。但是,长话短说,你有以下选择(NDK r9b):

APP_STL := gnustl_static
APP_STL := gnustl_shared
APP_STL := stlport_static
APP_STL := stlport_shared
APP_STL := libc++_static
APP_STL := libc++_shared

以下选项不包括std::ifstream:

APP_STL := gabi++_static
APP_STL := gabi++_shared
APP_STL := system

请注意,libc++_在NDK r9之前不可用,并且到目前为止还没有很好的文档记录。