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

时间:2022-12-27 18:32:47

环境:VC6
Project1: MFC AppWizard(dll),not MFC AppWizard(exe)
          "Use MFC in a Shared Dll" 
          工程里面使用了另外一个库:sqlite3.lib

           #pragma comment(lib, "sqlite3.lib")
          #include "sqlite3.h"

Build:


Linking...
mfcs42d.lib(dllmodul.obj) : error LNK2005: _DllMain@12 already defined in MSVCRTD.lib(dllmain.obj) 
mfcs42d.lib(dllmodul.obj) : warning LNK4006: _DllMain@12 already defined in MSVCRTD.lib(dllmain.obj); second definition ignored
   Creating library Debug/DataBase.lib and object Debug/DataBase.exp
Debug/DataBase.dll : fatal error LNK1169: one or more multiply defined symbols found
Error executing link.exe.

请帮忙看看,谢谢各位!

12 个解决方案

#1



error LNK2005: _DllMain@12 已经在 MSVCRTD.lib(dllmain.obj) 中定义 _DllMain@12 已经在 MSVCRTD.lib(dllmain.obj) 中定义
  VC2005解决办法:
1)Debug版本:
项目-属性-链接器-输入:忽略特定库中输入mfc80d.lib;mfcs80d.lib
项目-属性-链接器-附加依赖项:mfc80d.lib;mfcs80d.lib
  就可以保证mfc80d和mfcs80d先于MSVCRTD.lib链接,OK,成功
2)Release版本
  与Debug版本不同在于mfc80.lib;mfcs80.lib

以上方案来自:http://hi.baidu.com/duizhe_memory/item/56d1d54316a2d7dfc0a592e3
但工具是:VC2005
请问怎样可以将上面的方法具体实施在VC6?

#2



http://bbs.csdn.net/topics/390374923

现在已经可以编译通过了

#3


引用 2 楼 tony2278 的回复:
http://bbs.csdn.net/topics/390374923

现在已经可以编译通过了
error LNK2005: _DllMain@12 已经在 MSVCRTD.lib(dllmain.obj) 中定义
这些问题一般都是链接库不成功!

#4


把原工程的代码拷贝到一个新的工程,编译通过。
之后关掉新的工程,重新打开,编译,又出现:error LNK2005...
还是没有解决问题。

#5


“重建所有”不通过,编译通过没用。

#6


工程、设置、Link、分类:Input、附加库路径:填写附加依赖库所在目录 分号间隔多项
工程、设置、Link、分类:Input、对象/库模块:填写附加依赖库的名字.lib 空格间隔多项

#7


引用 5 楼 zhao4zhong1 的回复:
“重建所有”不通过,编译通过没用。


但现在是:“重建所有”通过,关闭工程,重新打开来编译不能通过。

#8


把原工程的代码拷贝到一个新的工程,“重建所有”通过,关闭新工程,重新打开来编译不能通过。 

#9


工程是关于一个sqlite3的类的二次封装。
怎样可以上传工程项目代码?

#10


肯定是设置不对

#11


终于解决了!!

Project -- Setting -- Link -- General -- Object/library modules: sqlite3.lib 
Project -- Setting -- Link -- Input -- Ignore libraries:MSVCRT.lib
还改了一处:Use run-time library为Multithreaded Dll

在VC中调用时,首先要通过"工具-》选项-》目录"来设定library的路径: sqlite3.lib


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

#12


搜“跟我一起写makefile”

#1



error LNK2005: _DllMain@12 已经在 MSVCRTD.lib(dllmain.obj) 中定义 _DllMain@12 已经在 MSVCRTD.lib(dllmain.obj) 中定义
  VC2005解决办法:
1)Debug版本:
项目-属性-链接器-输入:忽略特定库中输入mfc80d.lib;mfcs80d.lib
项目-属性-链接器-附加依赖项:mfc80d.lib;mfcs80d.lib
  就可以保证mfc80d和mfcs80d先于MSVCRTD.lib链接,OK,成功
2)Release版本
  与Debug版本不同在于mfc80.lib;mfcs80.lib

以上方案来自:http://hi.baidu.com/duizhe_memory/item/56d1d54316a2d7dfc0a592e3
但工具是:VC2005
请问怎样可以将上面的方法具体实施在VC6?

#2



http://bbs.csdn.net/topics/390374923

现在已经可以编译通过了

#3


引用 2 楼 tony2278 的回复:
http://bbs.csdn.net/topics/390374923

现在已经可以编译通过了
error LNK2005: _DllMain@12 已经在 MSVCRTD.lib(dllmain.obj) 中定义
这些问题一般都是链接库不成功!

#4


把原工程的代码拷贝到一个新的工程,编译通过。
之后关掉新的工程,重新打开,编译,又出现:error LNK2005...
还是没有解决问题。

#5


“重建所有”不通过,编译通过没用。

#6


工程、设置、Link、分类:Input、附加库路径:填写附加依赖库所在目录 分号间隔多项
工程、设置、Link、分类:Input、对象/库模块:填写附加依赖库的名字.lib 空格间隔多项

#7


引用 5 楼 zhao4zhong1 的回复:
“重建所有”不通过,编译通过没用。


但现在是:“重建所有”通过,关闭工程,重新打开来编译不能通过。

#8


把原工程的代码拷贝到一个新的工程,“重建所有”通过,关闭新工程,重新打开来编译不能通过。 

#9


工程是关于一个sqlite3的类的二次封装。
怎样可以上传工程项目代码?

#10


肯定是设置不对

#11


终于解决了!!

Project -- Setting -- Link -- General -- Object/library modules: sqlite3.lib 
Project -- Setting -- Link -- Input -- Ignore libraries:MSVCRT.lib
还改了一处:Use run-time library为Multithreaded Dll

在VC中调用时,首先要通过"工具-》选项-》目录"来设定library的路径: sqlite3.lib


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

#12


搜“跟我一起写makefile”