【问题提出】
今天写了个DLL,链接时发现出现 LNK4022
--------------------Configuration: LINK4022 - Win32 Debug--------------------
Compiling resources...
Compiling...
StdAfx.cpp
Compiling...
LINK4022.cpp
Operate.cpp
Generating Code...
Linking...
./LINK4022.def : warning LNK4022: cannot find unique match for symbol "AddData"
./LINK4022.def : warning LNK4002: "void __cdecl AddData(class CString,class CString)" (?AddData@@YAXVCString@@0@Z) defined in ./Debug/LINK4022.obj
./LINK4022.def : warning LNK4002: "public: void __thiscall COperate::AddData(class CString,class CString)" (?AddData@COperate@@QAEXVCString@@0@Z) defined in ./Debug/Operate.obj
LINK : fatal error LNK1152: cannot resolve one or more undecorated symbols
LINK : fatal error LNK1141: failure during build of exports file
Error executing link.exe.
LINK4022.dll - 2 error(s), 3 warning(s)
查看了MSDN
错误消息
无法找到符号“symbol”的唯一匹配项LINK 或 LIB 找到了给定未修饰符号的多个匹配项,但未能解析多义性。没有生成任何输出文件(.exe、.dll、.exp 或 .lib)。该警告之后,每个重复符号都有一个警告 LNK4006,最后是错误 LNK1152。
若要防止此警告,请指定修饰形式的符号。在对象上运行 Dumpbin 以查看修饰名。
【解决方案】
从链接错误中得知 AddData 函数在编译器内部的名字不唯一,说明代码中有多处定义AddData函数,所以只要保证AddData函数的定义唯一性即可