Я столкнулся с проблемой STLport Реализация STL. Я использую его для Android, хотя платформа, вероятно, здесь не актуальна.
Я использую стороннюю разделяемую библиотеку, которая пытается открыть определенный файл. Этот путь к файлу передается в функцию как std::string
, а затем доходит до встроенной функции библиотеки:
inline bool ReadProtoFromTextFile(const string& filename, Message* proto) {
return ReadProtoFromTextFile(filename.c_str(), proto);
}
а затем эта строка C используется в качестве аргумента open()
функция. Проблема в том, что с STLport, ReadProtoFromTextFile
функция получает недопустимую строку C, поэтому не удается открыть файл. Эта недопустимая строка C является детерминированной, это всегда следующая последовательность символов:
п!&\ Xffffffe8.
Когда я пытаюсь вызвать c_str () из моего кода, он всегда действителен.
Я попытался просмотреть проблемную строку с LLDB и получил эту ошибку:
ошибка: не удалось подготовить выражение к цели
Тем не менее, можно проверить внутреннюю структуру этой строки и проблемная последовательность строк присутствует там в _M_buffers._M_end_of_storage
поле. Правильная последовательность также есть в _M_buffers._M_start_of_storage
,
Когда я перешел на gnustl реализация, проблема исчезла. И LLDB показал .c_str () без проблем. Для меня это выглядит как внутренняя проблема, но что это может быть? stlport_shared рекомендуется реализация Google, в конце концов.
Задача ещё не решена.
Других решений пока нет …