Я использую boost.log. Помимо огромного количества agro на самом деле получает и строит его, он нормально работает в Windows 7 и Vista.
Сейчас я пытаюсь использовать приложение в Windows XP, но boost.log вылетает с необработанным исключением (Access violaton reading location 0x00000000
).
Это происходит в методе log:mt_nt5::sources::aux::set_severity_level
, где он пытается установить статическую глобальную переменную с именем g_SeverityLevel
.
Я нашел документ, в котором предлагается сборка с BOOST_LOG_NO_COMPILER_TLS
. Я пробовал это, но это не сработало.
Я прочитал подробнее об этом, и проблема, похоже, связана с глобальная переменная объявляется как __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?
/clr
? - person ildjarn   schedule 22.12.2011