编译错误:
--------------------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 是引用的第一个库。
以修饰形式显示的给定 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
在工程属性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就可以了
但是我要用到两个库啊,怎么办呢?
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 是引用的第一个库。
以修饰形式显示的给定 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
在工程属性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就可以了
但是我要用到两个库啊,怎么办呢?
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
还是没有用。