Ошибка отладки Cocos2d-x Android NDK (9): неверный дескриптор файла?

#android #android-ndk #cocos2d-x

#Android #android-ndk #cocos2d-x

Вопрос:

При разработке приложения для Android с использованием происходит сбой Cocos2d-x . Итак, я использую ndk-stack и получаю эту ошибку:

 D:Androidandroid-ndk-r8e>adb logcat | ndk-stack.exe -sym e:graduation_project
cocos2d-x-2.1.5projectsTest_pyproj.androidobjlocalarmeabi
********** Crash dump: **********
Build fingerprint: 'google/mysid/toro:4.2.2/JDQ39/573038:user/release-keys'
pid: 9911, tid: 9950, name: Thread-1096  >>> com.einverne.test_py <<<
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr ff7a8390
Stack frame #00  pc 0001055e  /system/lib/libc.so (dlmalloc 1729): Unable to ope
n symbol file e:graduation_projectcocos2d-x-2.1.5projectsTest_pyproj.androi
dobjlocalarmeabi/libc.so. Error (9): Bad file descriptor
Stack frame #01  pc 0000dcc7  /system/lib/libc.so (malloc 10): Unable to open sy
mbol file e:graduation_projectcocos2d-x-2.1.5projectsTest_pyproj.androidob
jlocalarmeabi/libc.so. Error (9): Bad file descriptor
Stack frame #02  pc 002a4bff  /data/app-lib/com.einverne.test_py-1/libcocos2dcpp
.so (cocos2d::unzOpenCurrentFile3(void*, int*, int*, int, char const*) 482): Rou
tine unzOpenCurrentFile3 in e:graduation_projectcocos2d-x-2.1.5/cocos2dx/suppo
rt/zip_support/unzip.cpp:1494
Stack frame #03  pc 002a4d9f  /data/app-lib/com.einverne.test_py-1/libcocos2dcpp
.so (cocos2d::unzOpenCurrentFile(void*) 10): Routine unzOpenCurrentFile in e:gr
aduation_projectcocos2d-x-2.1.5/cocos2dx/support/zip_support/unzip.cpp:1677
Stack frame #04  pc 002a302d  /data/app-lib/com.einverne.test_py-1/libcocos2dcpp
.so (cocos2d::ZipFile::getFileData(std::string constamp;, unsigned long*) 76): Rout
ine getFileData in e:graduation_projectcocos2d-x-2.1.5/cocos2dx/support/zip_su
pport/ZipUtils.cpp:556
Stack frame #05  pc 002943c5  /data/app-lib/com.einverne.test_py-1/libcocos2dcpp
.so (cocos2d::CCFileUtilsAndroid::getFileData(char const*, char const*, unsigned
 long*) 76): Routine getFileData in e:graduation_projectcocos2d-x-2.1.5/cocos2
dx/platform/android/CCFileUtilsAndroid.cpp:126
Stack frame #06  pc 00173267  /data/app-lib/com.einverne.test_py-1/libcocos2dcpp
.so (CLuaScriptReader::RunScriptFile(char const*, char*, char*) 46): Routine Run
ScriptFile in jni/../../Classes/LuaScriptReader.cpp:318
Stack frame #07  pc 00172129  /data/app-lib/com.einverne.test_py-1/libcocos2dcpp
.so (JudgeManager::getResult(std::string, std::string, CharacterEntity*, std::st
ring) 200): Routine getResult in jni/../../Classes/JudgeManager.cpp:51
 

Когда я вернусь к своему коду.

 bool CLuaScriptReader::RunScriptFile(const char *filename,char* ret_string,char *name){
    if( m_plua == NULL || ret_string == NULL || filename == NULL ) return false;
#if CC_TARGET_PLATFORM == CC_PLATFORM_WIN32
    char filebuff[MAX_LUA_FILE_LEN] = "";
    char line[1024] = "";
    FILE* fpFile = fopen(filename,"r");
    if( fpFile == NULL ) {
        printf("can not find file %sn",filename);
        return false;
    }
    while( fgets(line, 1024, fpFile) != NULL) {
        strcat(filebuff,line);
    }
    fclose(fpFile);
    RunScriptBuffer(filebuff,ret_string,name);
#endif
#if CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID
    unsigned long int size = 0;
    unsigned char* filebuff = CCFileUtils::sharedFileUtils()->getFileData(filename,"r",amp;size);
    CCString* ccStr = CCString::createWithData(filebuff,size);
    RunScriptBuffer(ccStr->getCString(),ret_string,name);
#endif
    return true;
}
 

В этой строке произошла ошибка:

 unsigned char* filebuff = CCFileUtils::sharedFileUtils()->getFileData(filename,"r",amp;size);
 

Тем не менее, я всегда использую этот код для чтения файла под Android. Класс CLuaScriptReader можно найти здесь

Ответ №1:

Как вы компилируете файлы?

Похоже, проблема со сценарием. Строки:

 signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr ff7a8390
Stack frame #00  pc 0001055e  /system/lib/libc.so (dlmalloc 1729): Unable to ope
n symbol file e:graduation_projectcocos2d-x-2.1.5projectsTest_pyproj.androi
dobjlocalarmeabi/libc.so. Error (9): Bad file descriptor
 

Сигнал 11 -> Сбой памяти, и путь ведет в никуда. / — это пути в системе UNIX и к системе WINDOWS, поэтому что-то не так найти libc.so

Неверный файловый дескриптор — это linux, если вы получаете это сообщение об ошибке при попытке доступа к файлу, наиболее распространенными причинами являются повреждение файловой системы или поврежденные дисковые блоки. В таких ситуациях вы также получаете ошибки записи.