程序使用 多線程調試 (/MTd) ,編譯不出錯,運行時會出錯,改成多線程調試 DLL (/MDd)時,編譯會報錯

問題描述

  • 我的程序是由兩個程序(A和B程序)合成的一版程序,
  • A程序使用的是
    在靜態庫中使用 MFC ------- 多線程調試 (/MTd),無添加任何的附加依賴項;
  • B程序使用的是 在靜態庫中使用 MFC ------- 多線程調試 DLL (/MDd),添加opewncv的一些lib庫作爲附加依賴項。
  • 合成的程序使用的配置是 在靜態庫中使用 MFC ------- 多線程調試 DLL (/MDd),添加opewncv的一些lib庫作爲附加依賴項。
  • 兩個程序單獨運行無任何問題,但是合成一個程序之後就會出現標題的錯誤。經調試,使用 多線程調試 (/MTd) ,運行時會報錯的位置如下
bool MatcchPic()
{
	....................
	....................
	return true;    //前面程序沒問題,但是就會在這句話中斷掉,這一塊的程序和程序B是一樣的,故排除程序的問題,應該是配置的問題
}

解決方案

  • 配置更改爲 在共享 DLL 中使用 MFC ------- 多線程調試 DLL (/MDd)

相關知識點

運行庫選項的區別

按照debug和release區分

  • 在調試模式下,使用調試運行庫:多線程調試(/MTd)、多線程調試DLL(/MDd)
  • 在發佈模式下,使用發佈運行庫:多線程(/MT)、多線程DLL(/MD)

按照靜態庫(.lib)和動態庫(.dll)區分

  • 靜態鏈接:多線程(/MT)、多線程調試(/MTd)

  • 動態鏈接:多線程DLL(/MD)、多線程調試DLL(/MDd)

  • 同種模式和鏈接下,x64下生成的可執行文件大小大於Win32下生成的

  • 參考網址:https://blog.csdn.net/qq_33757398/article/details/82156956

MD和MT混用的後果

在靜態庫中使用 MFC 和 在共享 DLL 中使用 MFC 的區別

  • 在靜態庫中使用 MFC
    會將MFC庫一起編譯,發佈時不需要將MFC相關DLL打包,但文件有可能會大些

  • 在共享 DLL 中使用 MFC
    系統如果有MFC相關DLL,則運行程序木有問題,但如果沒有,則需要將相關DLL打包,否則程序運行報DLL錯誤

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章