mfcs100ud.lib(dllmodul.obj):error LNK2005: _DllMain@12 已经在 MSVCRTD.lib(dllmain.obj) 中定义

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liubing8609/article/details/82056143

mfcs100ud.lib(dllmodul.obj):error LNK2005: _DllMain@12 已经在 MSVCRTD.lib(dllmain.obj) 中定义

简单地说,就是产生错误的工程同时使用了CRT库和MFC库,并且链接顺序不对,CRT库对newdelete DllMain 函数使用弱外部链接。MFC 库也包含 newdelete DllMain 函数。这些函数要求先链接 MFC 库,然后再链接 CRT 库。

【解决方法】:

项目 -> 属性 -> 链接器 -> 命令行栏中,输入 /verbose:lib编译参数,这样,就可以在output窗口看到链接时搜索的库的先后顺序,对于本问题,你一定可以看到类似下面的先后输出:

>    Searching D:\vs2008\VC\lib\MSVCRTD.lib: 

>    Searching D:\vs2008\VC\atlmfc\lib\mfcs90ud.lib: 

由此可以看出,默认情况下,先链接了CRTMSVCRTD.lib,然后链接的是MFC的库mfcs90ud.lib,因此,需要强制改变一下它们的链接顺序。

选择项目 -> 属性 -> 链接器 -> 输入栏,在其中的忽略特定的库这一栏输入:MSVCRTD.lib mfcs90ud.lib,然后,在附加库这一栏中输入: mfcs90ud.lib MSVCRTD.lib  问题即可解决。

vc2010下“项目 | 属性 | 配置属性 | 链接器 | 输入”,忽略特定默认库=MSVCRTD.lib;mfcs100ud.lib

附加依赖项=mfcs100ud.lib;MSVCRTD.lib

猜你喜欢

转载自blog.csdn.net/liubing8609/article/details/82056143