android ndk和eclipse给出了关于c+的不同错误信息+;getline()函数 我在Android JNI下有一些C++代码,当我使用NDK构建在命令行下时,它可以生成.LIbFILE,但是当我的项目运行为Android应用程序时,Eclipse会警告GETLIN()函数的一些错误,它告诉我必须首先修复错误。所以我很困惑
此处使用my getline()函数:android ndk和eclipse给出了关于c+的不同错误信息+;getline()函数 我在Android JNI下有一些C++代码,当我使用NDK构建在命令行下时,它可以生成.LIbFILE,但是当我的项目运行为Android应用程序时,Eclipse会警告GETLIN()函数的一些错误,它告诉我必须首先修复错误。所以我很困惑,android,c++,eclipse,c++11,android-ndk,Android,C++,Eclipse,C++11,Android Ndk,此处使用my 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
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\u istream和getline(std::basic\u istream&,std::basic\u string&)
std::basic_istream&getline(std::basic_istream&,std::basic_string&,0)
但是实际上,Android NDK已经成功地构建了C++代码:
请参阅控制台信息:
Build of configuration Default for project MyMapsforge
C:\TDDOWNLOAD\adt-bundle-windows-x86_64-20130729\ndk\android-ndk-r9\ndk-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\u工具链版本应在Application.mk中指定。另外请注意,您必须为项目指定APP\u STL
,此设置也会进入Application.mk
有关解释,请参见NDK。但是,长话短说,您有以下选择(使用NDK r9b):
以下选项不包括std::ifstream
:
APP_STL := gabi++_static
APP_STL := gabi++_shared
APP_STL := system
请注意,libc++\uu在NDK r9之前是不可用的,并且到今天为止没有很好的文档记录。通常我会说,您真正需要满足的是实际的NDK gcc,而不是Eclipse(如果您不想将其指向支持文件,可以简单地关闭Eclipse检查)。然而,您试图通过windows路径引用开发机器上的文件(标签显示的是android ndk代码)是极其错误的-该文件将无法访问,因为该程序将不会在windows box上运行,而是在真实或模拟的android设备上运行,无法访问C:。所以现在应该关注的不是错误信息,而是整个想法。我明白你的意思了。您建议我关闭eclispe检查代码。另一件事是,您注意到我的代码是错误的,我知道,我还没有纠正它,我将把导出函数中的文件路径作为jstring对象传递,然后执行一些操作。谢谢你的建议。@Chris Stratton:除了Application.mk被调整为clang而不是gcc之外。
APP_STL := gabi++_static
APP_STL := gabi++_shared
APP_STL := system