2011-12-22 117 views
1

我正在使用boost.log。除了極端數量的agro實際獲得並構建它之外,它在Windows 7和Vista上一直運行正常。爲什麼在Windows XP上boost.log崩潰?

我現在嘗試使用Windows XP上的應用程序,但boost.log與未處理的異常(Access violaton reading location 0x00000000)吹。

這發生在方法log:mt_nt5::sources::aux::set_severity_level中,它試圖設置一個名爲g_SeverityLevel的靜態全局變量。

我發現了一個document,暗示與BOOST_LOG_NO_COMPILER_TLS建設。我試過了,但沒有奏效。

I read further進入此問題,並且問題似乎是全局變量被宣佈爲__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文件夾中的內容,其內容是相同的!

因此,一個相關的問題可能現在是:am我正確使用bjam命令行?

+1

一次偶然的機會,您使用VC++與'/ clr'編制? – ildjarn 2011-12-22 19:28:28

+0

我正在使用VC++(Visual Studio 2010),但沒有使用/ clr – 2011-12-22 19:37:52

+1

什麼版本的XP? VC++ 2010要求目標平臺至少爲XP SP2。 – ildjarn 2011-12-22 19:58:26

回答

2

它崩潰,因爲它使用線程靜態聲明。正如上面鏈接的文章所述,如果包含日誌代碼的DLL使用LoadLibrary(它也覆蓋了COM組件)加載,這會導致Vista之前的操作系統出現問題。

如果你有這樣的問題,然後重新編譯boost.log庫,但don't forget to clear out your bin.v2 folder first

+0

我仍然有問題。我使用Boost作爲Windows平臺上的共享庫,起訴VC++ 2010.它可以像正常的exe一樣工作,但是在windows服務中使用boost日誌時會崩潰。任何想法? – 2014-09-12 12:18:37