2013-02-17 2 views
2

게임을 Android로 이식하려고하는데 저장/불러 오기 동작을 위해 부스트를 사용하고 있습니다. 저장 코드가 호출되면 앱이 충돌합니다.부스트 text_oarchive 생성자가 Windows가 아닌 Android에서 충돌합니다.

void OHRMapArchiver::saveMap() 
{ 
// copy some boost-incompatible data structures into ivar vectors 
mapInstance->preSave(); 

CCLog("preSave"); 
std::ofstream outStream(MAP_SAVE_FILE); 

CCLog("creating archive"); 
boost::archive::text_oarchive outputArchive(outStream); 

CCLog("Outputting archive"); 
outputArchive << mapInstance; 

// destroy all that stuff copied during pre-save 
mapInstance->tileLoader.erase(mapInstance->tileLoader.begin(), mapInstance->tileLoader.end()); 

}

이 확실이 경우되지 않는 이유에 대한 몇 가지 조언을 사용할 수 있습니다 : 다음 샘플 코드와 같이 text_oarchives을 만들려고 노력하는 동안 충돌이 발생합니다. 나는이 장치에서 디버깅 할 수있는 포기했지만, 특정 오류가 나는

boost::archive::text_oarchive outputArchive(outStream); 

가 호출 될 때 받고 있어요 (코드 = 1), 스레드 1969 (0xdead에서 "치명적인 신호 11 (SIGSEGV)입니다 Thread-112) "를 참조하십시오. 그래서 세그 폴트 (Segfault),하지만 내가 알기로는 왜 ostream을 둘러싼 래퍼 (wrapper) 만 만들었을지 상상할 수 없습니다.

다른 유용한 단서 ... 흠, 나는 어떤 객체가 성공적으로 그것을 성공적으로 호출했는지 말할 수는 없지만, serialize (Archive & ar, int version)를 구현하는 객체를 만들 수 있다는 것을 알고 있습니다. 가능한 연계 문제?

또한 파일 액세스 권한이 App에 사용됩니다. 적어도 "uses-permission android : name ="android.permission.WRITE_EXTERNAL_STORAGE ""가 매니페스트에 추가되었습니다. 충돌없이 std :: ostream.write를 사용하여 파일을 만들고 출력 할 수 있습니다. 또한 제목에서 알 수 있듯이 win32 버전은 완벽하게 작동하여 예상대로 데이터를 출력하고 충돌없이 다시 읽습니다.

젤리를 사용하는 기기에서 crystaX ndk r7을 사용합니다.

Android에서이 충돌이 발생하는 이유에 대한 의견이 있으십니까?

편집 : 업데이트하십시오. 부스트 애호가들에 따르면, 부스트가 안드로이드 NDK의 가장 최근의 공식 릴리스와 호환되지 않는다는 나의 가정에서 틀 렸습니다. 사용자 설정 파일이 적절히 정의되어 있다면, 최신 파일을 컴파일해야합니다.

대신 iostream을 부스트하는 소리가 들리며 키트와 충돌합니다.

답변

0

이것은 실제로 답변이 아닙니다. 나는 찾지 못했거나 그 중 하나를 찾을 수 없다. 제가 추천 할 수있는 것은 당신이 단순히 내가하고있는 일을하려고하지 않는 것입니다. 적어도 안드로이드 NDK r8d에서는 그렇지 않습니다.

부스트를 구성하여 wchar을 지원하지 않고 빌드하는 방법을 살펴본 결과, Windows에서 작동하는 코드가 직렬화/아카이브 라이브러리의 어딘가에서 부스트되었습니다. 나는 어디 있는지 모른다.

그렇습니다. 대답은 '포기, 가급적 4 개월 추적 솔루션 낭비'입니다.

관련 문제