問題描述
- 我的程序是由兩個程序(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錯誤