У меня есть приложение C ++, которое я портирую на MacOSX (в частности, 10.6). Приложение активно использует стандартную библиотеку C ++ и поддержку. Недавно в приложении произошел сбой, который я с трудом понимаю.
По сути, библиотека boost файловой системы выдает исключение времени выполнения при запуске программы. Немного отладив и прибегнув к поиску, я сократил вызывающий оскорбление вызов до следующей минимальной программы:
#include <locale>
int main ( int argc, char *argv [] ) {
std::locale::global(std::locale(""));
return 0;
}
Эта программа завершается сбоем, когда я запускаю ее через g ++ и выполняю полученную программу в среде, где задано LANG=en_US.UTF-8
(что на моем компьютере является частью сеанса bash по умолчанию при создании нового окна консоли). Очистка переменной среды (setenv LANG=
) позволяет программе работать без проблем. Но я удивлен, что вижу эту поломку в конфигурации по умолчанию.
Мои вопросы:
- Это ожидаемое поведение для этого кода в MacOS 10.6?
- Каким будет правильный обходной путь? Я не могу переписать эту функцию, потому что версия используемых нами библиотек наддува выполняет этот оператор внутри себя как часть библиотеки файловой системы.
Для полноты картины следует указать, что программа, из которой был синтезирован этот код, аварийно завершает работу при запуске с помощью команды open (или из Finder), но не при запуске программы в режиме отладки Xcode.
edit Ошибка, указанная кодом выше в 10.6.1:
$ ./locale
terminate called after throwing an instance of 'std::runtime_error'
what(): locale::facet::_S_create_c_locale name not valid
Abort trap