2013-02-18 274 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