Използвам 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
не се разпознава.
Изпускам ли нещо?
Актуализация:
Без значение какво правя, когато изграждам libs с 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