Я использую 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?