我在Visual Studio 2012中編譯了/ MT(靜態多線程運行時庫)的dll項目。它還鏈接了第三方靜態庫,也用/ MT(庫A)編譯,目前沒有問題。在單個DLL中混合/ MD和/ MT
問題出現在另一個靜態庫(庫B)中,它不幸地用/ MD編譯。在我的DLL中,我需要鏈接兩者,沒有其他選擇(我不能用不同的選項重新編譯它們)。我能夠成功地將所有內容鏈接在一起,但現在我遇到了內存分配和刪除的問題 - 有時它無法刪除分配的對象,有時會出現另一個奇怪的錯誤。我相信這是由我的dll的不同部分使用的混合內存管理函數引起的 - 當調用new時,在庫B中創建對象,但是當調用delete時,它會嘗試使用不同的函數集來釋放內存 - 但是我可能是錯誤的。
所以我的問題是,這是否真的是由混合內存管理功能引起的?如果是這樣,有什麼辦法可以一起完成這項工作嗎?
我認爲唯一的解決方案是將庫B包裝在另一個用/ MD編譯的dll中,然後從原始dll中使用它來確保使用不同的內存管理功能。我不確定,如果這會有幫助,我想避免它。
感謝您的回答,我能夠改變項目的設計來分隔內存分配,因此每個lib管理自己的對象。它現在似乎工作,希望我未來不會遇到問題。 – Firielentul