2013-06-29 89 views
1

我正在嘗試使用boost構建系統構建boost序列化/文件系統/系統的調試版本。下面是我使用:無法添加定義以提升版本

b2 serialization filesystem system variant=debug link=static threading=multi 
    runtimelink=static define=_HAS_ITERATOR_DEBUGGING=0 toolset=msvc-11.0 

然而,當我包括我的調試Visual Studio項目庫我仍然得到象這樣的錯誤:

(basic_iarchive.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in Game.obj 

這使我相信的,我的「定義」在升壓版本中沒有任何影響。什麼是正確的語法?我找不到任何例子,文件dosnt在這件事上說了其他的話。

編輯:我想強制執行,我想定義在我升壓_HAS_ITERATOR_DEBUGGING = 0建設

+0

嘗試指定'限定= _ITERATOR_DEBUG_LEVEL = 0' http://msdn.microsoft.com/en-us/library/hh697468.aspx –

回答

0

_ITERATOR_DEBUG_LEVEL沒有提高的事情,但標準庫實現的一部分附帶MSVC。您必須非常小心地使用此設置的一致值來編譯構建中的所有內容。在許多情況下,鏈接器會像您引用的消息一樣診斷它,但遺憾的是,它可能未被發現。由於它改變了大多數std集合和相關內容的大小和佈局,請猜測後面的內容。

默認情況下,它不會被設置爲任何內容,並且當您包含一些標準頭時,它會查找_DEBUG並將其自身設置爲2.如果系統中沒有設置它,並且您始終使用_DEBUG,

有了提升我不熟悉,但會想你報價的話,強制宏以0值如果是這樣,難怪你有差異的設置。將其設置爲2,或者如果您的意思是0,請繼續並在所有項目中使用它。如Igor所評論的,

0

添加define=_ITERATOR_DEBUG_LEVEL=0適合我。

_HAS_ITERATOR_DEBUGGING然後通過基於上述設定的MS-頭文件中定義,所以你不應該嘗試直接設置它。

在某些情況下(實時3d),將其設置爲0可顯着提高調試性能,因此肯定有用例說明它,即使重新編譯在接口中公開STL容器/迭代器的所有DLL的痛苦。