게임을 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을 부스트하는 소리가 들리며 키트와 충돌합니다.