2013-02-18 269 views
3

我的VC++ MFC解決方案包含四個項目。多線程DLL(/ MD)vs多線程(/ MT)

  1. 兩個項目建設作爲DLL的
  2. 一個項目建設作爲靜態庫
  3. 一個項目通過使用以上三個庫建設爲exe文件。

我需要在Windows XP中無需CLR支持託管此應用程序。所以我在所有四個項目中都使用配置Use of MFC作爲Use MFC in a Static Library

所以我的問題是什麼應該是C++-> Code Genaration配置爲每個項目。

+0

我應該用/ MD還是/ MT來編譯? :http://stackoverflow.com/questions/757418/should-i-compile-with-md-or-mt – Pheonix 2013-02-18 08:41:23

+0

@Pheonix:謝謝你,我讀了這個。邏輯上DLL應該使用/ MD,Lib和Exe應該使用/ MT。但我的應用程序得到一些鏈接錯誤。 '錯誤LNK2005:__encode_pointer已經在MSVCRT.lib(MSVCR90.dll)中定義''。我認爲,因爲靜態庫已經包含一個MSVCRT.lib。所以這是退出衝突。所以我需要一些直接的答案,如果有人明確理解這個概念。我認爲這個問題應該有一些直接的規則。 – 2013-02-18 09:03:03

回答

1

使用/ MD爲您的所有項目。正如所引用的問題所述:重要的是保持一致。因此:即使使用/ MD構建您的靜態庫,因爲它將用於/ MD可執行文件。 當您這樣做時,鏈接器不會嘗試鏈接解決錯誤的兩個不同版本的Microsoft庫(靜態和動態)。

+0

此解決方案對我無效。所以我只是爲了測試目的而減少我的一個exe和一個dll的應用程序。都建立爲在靜態庫中使用'MFC'和'多線程DLL(/ MD)',但沒有在Windows XP中運行。但運行在Windows 7的Visual Studio安裝的電腦。 – 2013-02-19 04:35:30