Visual c++ 将C++应用程序从VC6移植到VS2005后的链接器错误

Visual c++ 将C++应用程序从VC6移植到VS2005后的链接器错误,visual-c++,visual-studio-2005,mfc,visual-c++-6,Visual C++,Visual Studio 2005,Mfc,Visual C++ 6,将应用程序从VC6移植到Visual Studio 2005时出错 有人知道这意味着什么吗 mfcs80.libdllmodul.obj:错误 LNK2005:_DllMain@12已经定义 在MSVCRT.libdllmain.obj中 从 CRT启动时发生LNK2005错误 库和MFC库是链接的 在Visual C中以错误的顺序++ 因为 CRT库使用弱外部 新建、删除和删除的链接 DllMain函数。MFC库 还包含new、delete和DllMain 功能。这些功能需要 要在 CRT库已

将应用程序从VC6移植到Visual Studio 2005时出错

有人知道这意味着什么吗

mfcs80.libdllmodul.obj:错误 LNK2005:_DllMain@12已经定义 在MSVCRT.libdllmain.obj中

CRT启动时发生LNK2005错误 库和MFC库是链接的 在Visual C中以错误的顺序++

因为

CRT库使用弱外部 新建、删除和删除的链接 DllMain函数。MFC库 还包含new、delete和DllMain 功能。这些功能需要 要在 CRT库已链接

所以

有两种方法可以解决这个问题 问题第一个解决方案涉及 强制链接器链接 按正确的顺序排列图书馆。这个 第二种解决方案允许您找到 导致故障的模块,以及 纠正它

或者

强制链接器链接 图书馆秩序井然

在“项目”菜单上,单击“设置”。 在“项目设置”对话框的“视图设置”中,单击以 选择所需的项目配置 正在获取链接错误。 在“链接”选项卡上,单击以在“类别”组合框中选择“输入”。 在“忽略库”框中,插入库名称,例如, Nafxcwd.lib;Libcmtd.lib

请注意/NOD中的链接器命令行等效项:

在“对象/库模块”框中,插入库名称。你 必须确保这些都已列出 按顺序和作为前两个 例如,该行中的库, Nafxcwd.Libcmtd.lib。

在VisualC++中设置此选项, 读取设置Visual C++项目 属性联机帮助主题

找到并纠正错误 问题模块以查看当前问题 图书馆链接顺序,请遵循以下步骤 步骤:

在“项目”菜单上,单击“设置”。 在“项目设置”对话框的“视图设置”中,单击以 选择所需的项目配置 正在获取链接错误。 在“链接”选项卡上,在“项目选项”中键入/verbose:lib 盒 重建您的项目。这些库将列在输出中 链接过程中的窗口。 从

CRT启动时发生LNK2005错误 库和MFC库是链接的 在Visual C中以错误的顺序++

因为

CRT库使用弱外部 新建、删除和删除的链接 DllMain函数。MFC库 还包含new、delete和DllMain 功能。这些功能需要 要在 CRT库已链接

所以

有两种方法可以解决这个问题 问题第一个解决方案涉及 强制链接器链接 按正确的顺序排列图书馆。这个 第二种解决方案允许您找到 导致故障的模块,以及 纠正它

或者

强制链接器链接 图书馆秩序井然

在“项目”菜单上,单击“设置”。 在“项目设置”对话框的“视图设置”中,单击以 选择所需的项目配置 正在获取链接错误。 在“链接”选项卡上,单击以在“类别”组合框中选择“输入”。 在“忽略库”框中,插入库名称,例如, Nafxcwd.lib;Libcmtd.lib

请注意/NOD中的链接器命令行等效项:

在“对象/库模块”框中,插入库名称。你 必须确保这些都已列出 按顺序和作为前两个 例如,该行中的库, Nafxcwd.Libcmtd.lib。

在VisualC++中设置此选项, 读取设置Visual C++项目 属性联机帮助主题

找到并纠正错误 问题模块以查看当前问题 图书馆链接顺序,请遵循以下步骤 步骤:

在“项目”菜单上,单击“设置”。 在“项目设置”对话框的“视图设置”中,单击以 选择所需的项目配置 正在获取链接错误。 在“链接”选项卡上,在“项目选项”中键入/verbose:lib 盒 重建您的项目。这些库将列在输出中 链接过程中的窗口。
我确信有很多原因会发生这种情况——我所发现的最糟糕的一个原因是,当我们试图集成一些静态库时,我们最初是DLL。事实上,我们将项目构建为DLL和静态库

我们的C++/CLI DLL使用这些库的静态版本来避免DLL依赖性问题,这些问题在使用C++/CLI DLL并且最初看到相同的链接器错误时会导致ASP.NET加载问题

问题是使用了AFX_MANAGE_STATEAfxGetStaticModuleState宏,该宏在代码构建为DLL时是必需的,但在静态库调用中实际上并不需要

为了解决这个问题,我在std中添加了以下代码 每个项目的afx.h

#ifdef OMUTILITIES_LINK_STATIC
    #undef AfxGetStaticModuleState
    #define AfxGetStaticModuleState AfxGetModuleState
#endif

当然,这可能不是你的具体问题。但我最终得出结论的方式是,打开链接器的/VERBOSE选项,然后查看谁、什么、在哪里以及何时拉入运行库。vs2005中的项目属性/配置属性/链接器/显示进度

我确信发生这种情况的原因有很多-我所发现的最糟糕的一个原因是,在尝试集成一些最初是DLL的静态库时,我们实际上将项目构建为DLL和静态库

我们的C++/CLI DLL使用这些库的静态版本来避免DLL依赖性问题,这些问题在使用C++/CLI DLL并且最初看到相同的链接器错误时会导致ASP.NET加载问题

问题是使用了AFX_MANAGE_STATEAfxGetStaticModuleState宏,该宏在代码构建为DLL时是必需的,但在静态库调用中实际上并不需要

为了解决这个问题,我在每个项目的stdafx.h中添加了以下代码

#ifdef OMUTILITIES_LINK_STATIC
    #undef AfxGetStaticModuleState
    #define AfxGetStaticModuleState AfxGetModuleState
#endif

当然,这可能不是你的具体问题。但我最终得出结论的方式是,打开链接器的/VERBOSE选项,然后查看谁、什么、在哪里以及何时拉入运行库。vs2005中的项目属性/配置属性/链接器/显示进度

您可以将链接器输入设置为忽略项目属性中的问题库,但这可能有效,也可能无效。

您可以将链接器输入设置为忽略项目属性中的问题库,但是,这可能有效,也可能无效。

我在链接过程中遇到了一个错误,这是我在vc6中没有遇到的,因为Rich B的大量编辑,这个问题几乎无法容忍。这个问题是非常本地化的。很抱歉问一下,但是为什么你想从一个10年历史的技术移植到一个更老的技术呢?发问者的意思不是说VC5-mfcs80.lib表明他在使用VS2005。我明白了。我自己不是MS用户,但LNK2005应该是一个提示。我在链接过程中遇到了一个错误,这是我在vc6中没有遇到的,这个问题仅仅是勉强可以容忍的,因为Rich B的大编辑。这个问题是非常本地化的。很抱歉问一下,但是为什么你想从一个10年历史的技术移植到一个更老的技术呢?发问者的意思不是说VC5-mfcs80.lib表明他在使用VS2005。我明白了。我自己不是MS用户,但LNK2005应该是一个提示。