2012-09-12 46 views
0

我有點奇怪的問題,通常人們傾向於問如何從其可執行文件中刪除對msvcrXX.dll的引用,並且我有相反的問題:我需要強制我的可執行文件使用msvcr100.dll。這是需要的,因爲我將使用CRT的附加DLL鏈接到我的項目,並且此DLL導入msvcr函數。因此我設置了/ MD選項,然後當在「Debug」中構建時,我得到一個工作代碼(msvcr100.dll位於EXE的導入表中),但是當我嘗試編譯「Release」時,我實現了一個更大的可執行文件,只能從mylib.dll和kernel32.dll導入,導致CRT無法正確初始化,並因此導致運行時錯誤。/在Visual Studio中的MD不從msvcr100.dll在發佈配置中導入

我有

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 
在代碼

,並且例如, 'printf的' 功能被使用。

在此先感謝您的答案。

Add: 我找到的解決方案:在代碼的開頭添加「#define _DLL」,並將msvcrt.lib添加到其他依賴項。谷歌說,這就是「/ MD」必須做的事情,不知道爲什麼它沒有。

+0

爲什麼?如果你使用另一個DLL,並且它導入了msvcr100,那麼你就完成了。沒有理由讓你的基本可執行文件也執行它。 – bmargulies

+0

例如,如果他使用'strtok()'([更多信息](http://msdn.microsoft.com/en-us/library/abx4dbyh%28v=vs.100%29.aspx))。無論如何,你是否在所有配置上設置了/ MD? (/ MDd on debug,/ MD發佈時) – ErikEsTT

+0

您忘記更改發佈配置的設置。 –

回答

0

我找到的解決方案:在代碼的開頭添加「#define _DLL」,並將msvcrt.lib添加到其他依賴項。谷歌說,這就是「/ MD」必須做的事情,不知道爲什麼它沒有。

更多漂亮的想法仍然值得讚賞。