У меня есть приложение на С++, которое я переношу на MacOSX (в частности, 10.6). Приложение сильно использует стандартную библиотеку С++ и повышает. Недавно я заметил некоторый порыв в приложении, с которым мне трудно понять.
В принципе, библиотека файловой системы boost генерирует исключение во время выполнения при запуске программы. С небольшим количеством отладки и поиска в Google, я уменьшил оскорбительный вызов до следующей минимальной программы:
#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?
- Каким будет подходящее обходное решение? Я не могу переписать функцию раньше, потому что используемая нами версия библиотек boost выполняет это внутреннее выражение как часть библиотеки файловой системы.
Для полноты я должен указать, что программа, из которой был синтезирован этот код, сбрасывается при запуске через команду "open" (или из Finder), но не тогда, когда Xcode запускает программу в режиме Debug.
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