簡體   English   中英

C ++使用我的調試版本鏈接發布內置庫

[英]C++ Linking release built library with my debug build

我已經下載了第三方庫,並在'release'模式下構建了.lib文件。 將lib添加到我的項目后,如果我在發布模式下運行我的項目,那很好。 但如果我在調試模式下運行我的項目,我會收到一個錯誤:

_iterator_debug_level value '0' doesn't match value '2;

我可以在調試模式下重建庫,但我不認為我需要調試庫本身? 我已經下載了預先構建的第三方庫,之前只有一個版本構建(我假設?),無論我的項目是在調試還是發布,它都可以很好地鏈接。 我想知道如何做到這一點。

如果要分發其他人可以在發布或調試模式下使用的發布庫,則需要執行以下兩項操作:

  • 構建DLL,以便獲得自己的C運行時庫副本
  • 不跨庫邊界共享CRT資源,例如堆。 C代碼最重要的是動態分配的內存必須在邊界的同一側解除分配。 對於C ++代碼,您可以在DLL中使用std命名空間,但不能跨越邊界傳遞這些對象。

這就是預先構建的第三方庫最有可能完成的事情。 僅當外部接口不共享CRT對象時,才能對庫執行相同的操作。 或者,您可以將單獨的發行版和調試版構建為靜態庫。

看起來您的調試二進制文件和您下載的庫使用不兼容的迭代器調試模式。 迭代器調試通常由宏控制。 根據宏值,可以更改交互器和許多其他對象的大小。 你很幸運,你的程序發出了有用的錯誤信息,而不是簡單地粉碎。

檢查庫文檔並確保您的項目使用相同的迭代器調試模式。 您也可以嘗試在發布模式下重新編譯庫。 如果這沒有幫助,您將不得不在調試模式下重新編譯庫,即使您不打算調試庫本身。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM