工程:Win32 Dynamic-Link Library已设置:Multithreaded DLLLinking...
mfcs42.lib(dllmodul.obj) : error LNK2005: _DllMain@12 already defined in MSVCRT.lib(dllmain.obj)
mfcs42.lib(dllmodul.obj) : warning LNK4006: _DllMain@12 already defined in MSVCRT.lib(dllmain.obj); second definition ignored
   Creating library ../Release/Test.lib and object ../Release/Test.exp
../Release/Test.dll : fatal error LNK1169: one or more multiply defined symbols found
Error executing link.exe.

解决方案 »

  1.   

    你在Win32的工程里用了MFC的库,所以会出现错误!!
      

  2.   

    链接器工具错误 LNK2005在对象中已定义符号以修饰形式显示的给定 symbol 被多次定义。可能的原因 不慎同时与单线程库和多线程库链接。确保应用程序项目文件只包括适当的库,并且任何第三方库已适当创建了单线程或多线程版本。 
    该符号为封装函数(通过用 /Gy 编译创建),包含在多个文件中,但在各编译间已改变。重新编译所有包含 symbol 的文件。 
    以不同的形式在不同库中的两个成员对象中定义了该符号,并且使用了这两个成员对象。 
    某个绝对符号被定义两次,而每次定义的值不同。 
    头文件声明并定义了变量。可能的解决方案有: 
    在 .h 中声明变量:extern BOOL MyBool;,然后在 .c 或 .cpp 文件中向它分配:BOOL MyBool = FALSE;。 
    将变量声明为 Static。 
    将变量声明为 selectany。 
    当将 uuid.lib 与定义 GUID 的其他 .lib 文件(例如 oledb.lib 和 adsiid.lib)一起使用时。例如: 
    oledb.lib(oledb_i.obj) : error LNK2005: _IID_ITransactionObject
    already defined in uuid.lib(go7.obj)
    若要修复,请将 /FORCE:MULTIPLE 添加到链接器命令行选项,并确保 uuid.lib 是引用的第一个库。 有关更多信息,请参阅知识库文章: Q148652,PRB: LNK2005 Errors When Link C Run-Time Libraries Are Linked Before MFC Libraries。 
    Q140440,FIX: Global Overloaded Delete Operator Causes LNK2005。 
    Q184235,PRB: LNK2005 Errors on New and Delete When Defining _ATL_MIN_CRT。 
    该错误之后为致命错误 LNK1169。
      

  3.   

    Visual C++ 概念:生成 C/C++ 程序   链接器工具警告 LNK4006在对象中已定义符号;将忽略第二个定义以修饰形式显示的给定 symbol 被多次定义。遇到此警告时,symbol 将被添加两次,但只使用它的第一个形式。试图将两个导入库合并为一个库时会得到此警告。提示 给定的 symbol 可能是封装函数,通过用 /Gy 进行编译创建的。该符号包括在多个文件中,但在各编译间已改变。重新编译所有包含 symbol 的文件。 
    可能以不同的形式在不同库中的两个成员对象中定义给定 symbol。 
    绝对符号可能被定义了两次,每次定义的值不同。 
    如果在组合库时收到该错误信息,则所添加的库中已有 symbol。 
    如果您正在重新生成 C 运行时库,则可以忽略此消息。
      

  4.   

    有可能是你重新包含了MFC中已经隐含包含的头文件
      

  5.   

    改用动态连结mfc。
    C rumtime library用了动态连结mscvrt,mfc也要用动态连结。
      

  6.   

    两种解决办法:
    使用lib工具 将dllmodul.obj从mfcs42.lib取出(命令lib/extract:dllmodul.obj mfcs42.lib )
    将dllmodule.obj加到link选项里面,强制linker连接MFC的dllmain另外就是 wuxuan(真心英雄) 说的方法:
    linker选项里面忽略mfcs42.lib,将mfcs42.lib加到link选项里面
      

  7.   

    1)可能你有些cpp文件包括了stadafx.h,而又有些包括了windows.h,在这种情况下你应该在文件中使用stdafx.h。
           2)VC环境是使用.DSP来建立一个项目,可能你的编译器或连接器设置中与你的.MAK文件中的设置不匹配。