小妹初学DLL,各位大侠帮帮忙

时间:2022-09-05 21:04:53
小妹建立了一个WIN32 Dynamic-link library 工程,里面就建了一个类
编译错误:
--------------------Configuration: DLLFC32 - Win32 Debug--------------------
Compiling...
Dict.cpp
Linking...
nafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) already defined in libcpmtd.lib(delop.obj)
Debug/DLLFC32.dll : fatal error LNK1169: one or more multiply defined symbols found
Error executing link.exe.

DLLFC32.dll - 2 error(s), 0 warning(s)

7 个解决方案

#1


在对象中已定义符号

以修饰形式显示的给定 symbol 被多次定义。

可能的原因 

不慎同时与单线程库和多线程库链接。确保应用程序项目文件只包括适当的库,并且任何第三方库已适当创建了单线程或多线程版本。 
在也使用 /clr 时混合静态库和动态库。 
该符号为封装函数(通过用 /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 是引用的第一个库。 

#2


库冲突导致的链接错误。
在工程属性Link页中
Category->Input
在Ignore libraries填入要忽略的库,比如:
libcpmtd.lib

#3


好像不是BOOL的问题,我在类的头文件里包含了好多文件
include <map>
#include <iostream>
#include <fstream>
#include <string>
#include "afx.h"
using namespace std;

好像是string和afx.h有冲突。去掉一个include就可以了
但是我要用到两个库啊,怎么办呢?

#4


using namespace std;去掉这句呢?

#5


去掉错误就更多了

#6


#include 的顺序交换一下试试

#7


还是没有用。

#1


在对象中已定义符号

以修饰形式显示的给定 symbol 被多次定义。

可能的原因 

不慎同时与单线程库和多线程库链接。确保应用程序项目文件只包括适当的库,并且任何第三方库已适当创建了单线程或多线程版本。 
在也使用 /clr 时混合静态库和动态库。 
该符号为封装函数(通过用 /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 是引用的第一个库。 

#2


库冲突导致的链接错误。
在工程属性Link页中
Category->Input
在Ignore libraries填入要忽略的库,比如:
libcpmtd.lib

#3


好像不是BOOL的问题,我在类的头文件里包含了好多文件
include <map>
#include <iostream>
#include <fstream>
#include <string>
#include "afx.h"
using namespace std;

好像是string和afx.h有冲突。去掉一个include就可以了
但是我要用到两个库啊,怎么办呢?

#4


using namespace std;去掉这句呢?

#5


去掉错误就更多了

#6


#include 的顺序交换一下试试

#7


还是没有用。