2013-12-13 2 views
2

У меня есть код C++ под android JNI, когда я использую ndk-build в командной строке, он может сгенерировать .so libfile, но при запуске моего проекта как приложение для Android, eclipse предупреждает о некорректной ошибке в функции getline(), он должен сначала сначала исправить ошибку. поэтому я смущен.android ndk и eclipse дают другую информацию об ошибке о функции cline 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() информация является: Недопустимые аргументы " Кандидаты: станд :: basic_istream < # 0, # 1> & GetLine (станд :: basic_istream < # 0, # 1> &, станд :: basic_string < # 0, # 1, # 2> &) станд :: basic_istream < # 0, # 1> & GetLine (станд :: basic_istream < # 0, # 1> &, станд :: basic_string < # 0, # 1, # 2> &, # 0)

, но на самом деле, андроид-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 **** 

у вставили эту функцию является containde в моем 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 напоминает, что содержит ошибку, поэтому я не могу запустить проект.

+0

Обычно я бы сказал, что фактический ndk-gcc, а не Eclipse - это то, что вам действительно нужно удовлетворить (вы можете просто отключить Eclipse, если вам не хочется указывать его на поддерживающие файлы). Однако ваша попытка ссылаться на файл на машине разработки по пути к Windows, в том, что предлагают ваши теги, - это код андроида-ndk, крайне ошибочен - этот файл не будет доступен, поскольку программа не будет запущена в окне окна, а скорее на реальном или эмулированном устройстве Android без доступа к C :.Таким образом, это не сообщения об ошибках, а вся идея, которая должна быть актуальна сейчас. –

+0

У меня есть смысл. вы советуете мне выключить код проверки eclispe. Другое дело, что ваше уведомление о том, что мой код ошибочен, я это знаю, я уже не исправляю его, я передам путь к файлу в функции экспорта как объект jstring, а затем сделаю somthing. спасибо за советы. – user1279988

+0

@ Chris-Stratton: кроме того, что Application.mk настроен на ** clang **, а не ** gcc **. –

ответ

1

Когда вы застряли с этими сообщениями об ошибке из Eclipse, вы должны просто перейти к представлению «Проблемы» и удалить сообщения. Очистите проект, и сообщения больше не появятся. Обратите внимание, что по book, NDK_TOOLCHAIN_VERSION должно быть указано в Application.mk. Также обратите внимание, что для вашего проекта необходимо указать APP_STL, и этот параметр также относится к Application.mk.

Для пояснения см. NDK CPLUSPLUS-SUPPORT.html. Но, чтобы сделать длинную историю короткой, у вас есть выбор follwing (с 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 и на сегодняшний день не документированы.

Смежные вопросы