Почему происходит сбой boost.log в Windows XP? - PullRequest
1 голос
/ 22 декабря 2011

Я использую boost.log.Помимо огромного количества agro , на самом деле получающего и собирающего его, оно работает нормально на Windows 7 и Vista.

Я сейчас пытаюсь использовать приложение на Windows XP, но ускорился.log дует с необработанным исключением (Access violaton reading location 0x00000000).

Это происходит в методе log:mt_nt5::sources::aux::set_severity_level, где он пытается установить статическую глобальную переменную с именем g_SeverityLevel.

Я нашел документ , который предлагал построить с BOOST_LOG_NO_COMPILER_TLS.Я попробовал это, но это не сработало.

I , читайте дальше , и проблема, похоже, заключается в том, что глобальная переменная объявлена ​​как __declspec(thread), что делает ее статической в ​​потоке.Это проблема только операционных систем до Vista.

Я статически связываюсь с boost.log, поэтому не могу понять, почему мой препроцессор BOOST_LOG_NO_COMPILER_TLS не распознается.

Я что-то упустил?

Обновление:

Независимо от того, что я делаю при сборке библиотек с bjam, мой BOOST_LOG_NO_COMPILER_TLS флаг не установлент быть признанным.Я строю так:

bjam address-model=32 --toolset=msvc-10.0 --build-type=complete 
  --with-log variant=debug link=static runtime-link=static   
  define=BOOST_LOG_NO_COMPILER_TLS stage

Я сравнил содержимое вывода в папке stage после сборки с этим флагом и без него, и содержимое идентично!

Итак, связанный вопрос, вероятно, теперь будет таким: правильно ли я использую командную строку bjam?

1 Ответ

2 голосов
/ 23 декабря 2011

Сбой, потому что он использует статические объявления потока. Как описано в статьях, ссылки на которые приведены выше, это вызывает проблемы в операционных системах до Vista, если библиотека DLL, содержащая код журнала, загружается с помощью LoadLibrary (которая также охватывает компоненты COM).

Если у вас возникла эта проблема, перекомпилируйте библиотеку boost.log, но не забудьте сначала очистить папку bin.v2 !

...