当前位置:  开发笔记 > 编程语言 > 正文

错误LNK2005:_DllMain @ 12已在MSVCRT.lib中定义

如何解决《错误LNK2005:_DllMain@12已在MSVCRT.lib中定义》经验,为你挑选了5个好方法。

我收到此链接器错误.

mfcs80.lib(dllmodul.obj):错误LNK2005:_DllMain @ 12已在MSVCRT.lib中定义(dllmain.obj)

请告诉我消除此错误的正确方法.我在微软支持网站上阅读了关于这个bug的解决方案,但它没有多大帮助.

我正在使用VS 2005和Platform SDK



1> Constantin..:

我有相同的错误消息,但这里的答案都没有为我解决.因此,如果您在创建使用MFC的DLL项目时遇到该问题,可以通过输入以下行来解决它:

extern "C" { int _afxForceUSRDLL; } 

DllMain定义的cpp文件.然后使用您自己的DllMain实现,而不是dllmain.obj中的实现.

当我们尝试使用MFC库时,我们肯定会直接或间接地包含afx.h,然后MFC(afx.h)告诉链接器找到__afxForceUSRDLL的符号并将包含__afxForceUSRDLL的对象放入程序中,以便链接器搜索和将dllmodule.obj放入我们的程序中,因为__afxForceUSRDLL是在dllmodule.cpp中定义的.

这是常见的情况.当我们想在mfc dll项目中使用我们自己的DllMain时,链接器抱怨有两个DllMain,一个在我们的代码中,一个在Dllmodule.obj中.

所以我们需要告诉链接器为__afxForceUSRDLL添加我们的dllmain.obj.所以我们需要在我们自己的cpp文件中定义__afxForceUSRDLL,其中定义了我们自己的DllMain,然后链接器将忽略mfc的dllmodule.obj并且只看到一个DllMain并且从不抱怨.

资料来源:http://social.msdn.microsoft.com/Forums/en-US/0d78aa6b-1e87-4c01-a4a7-691335b7351a/how-to-build-mfc-application-dll-in-visual-c-2010



2> xtofl..:

如果您彻底阅读了链接器错误并应用了一些知识,那么您可以自己实现:

链接器将许多编译对象和库链接在一起以获取二进制文件.

每个对象/库都描述

它希望在其他对象中出现什么符号

它定义了什么符号

如果两个对象定义相同的符号,则会得到此链接器错误.在您的情况下,mfcs80.lib和MSVCRT.lib都定义_DllMain @ 12符号.

摆脱错误:

    找出你真正需要的两个库

    找出如何告诉链接器不要使用另一个(使用例如James Hopkin的提示)


+1好点 - 我没有正确地阅读错误.最近,当MFC库选项神秘地启动时,我自己也遇到了类似的链接器错误.
缺少细节 - 一些库定义弱连接,定义正确的库包含顺序将首先使用mfc而第二次使用msvcrt,因此静默地删除弱连接

3> James Hopkin..:

如果您要定义自己的DllMain,则需要在项目设置中将"配置属性/常规"中的"使用MFC"设置为"使用标准Windows库".

更改后应该进行干净的重建.


我有一个纯C,非MFC DLL设置为"使用标准Windows库",但错误仍然弹出.

4> vmb100..:

在我的项目中,我能够通过在项目设置中添加mfcs80.lib和msvcrt.lib作为附加依赖项来解决此问题."附加依赖项"可以在"链接器" - >"输入"下找到.

在调试配置中,必须分别是mfcs80d.lib和msvcrtd.lib.

顺便说一句,我正在使用Visual Studio 2010,所以在我的情况下,MFC lib被称为mfc100.lib.

我不确定为什么会这样.没有必要将这些lib文件添加为附加依赖项,因为我已经将"使用MFC"设置为"在共享dll中使用MFC".我想通过将这些库指定为附加依赖项,它们以不同的顺序链接.

此解决方案与Microsoft站点上建议的解决方案大致相同:http://support.microsoft.com/kb/148652,但我不需要在"忽略特定的默认库"框中键入任何内容.



5> Ofek Shilon..:

对我来说,直接原因确实是缺少_afxForceUSRDLL符号引用,但间接原因是缺少_USRDLL宏定义.它由VC向导默认定义,但偶尔会错误地擦除它. 在这里,它更多的是.

推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有