每当我开始构建我的DLL时,我都会收到此错误: 致命错误LNK1169:找到一个或多个多重定义的符号
我认为代码没有任何问题,因为我从源代码中复制了它:
ExoDll1.cpp
#include "stdafx.h"
double BoxArea(double L, double H, double W);
double BoxVolume(double L, double H, double W);
extern "C" __declspec(dllexport)void BoxProperties(double Length, double Height,
double Width, double& Area, double& Volume);
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}
double BoxArea(double L, double H, double W)
{
return 2 * ((L*H) + (L*W) + (H*W));
}
double BoxVolume(double L, double H, double W)
{
return L * H * W;
}
void BoxProperties(double L, double H, double W, double& A, double& V)
{
A = BoxArea(L, H, W);
V = BoxVolume(L, H, W);
}
我尝试创建一个新项目并删除旧项目,但同样的问题仍然存在..这似乎是什么问题?
答案 0 :(得分:2)
只有一个翻译单元(例如ExoDll1.cpp
)才能显示此错误消息。例如,您可能会在不知不觉中尝试同时编译此代码的多个版本。
检查您的项目并删除您不想编译的任何源代码。
确保项目中的任何地方都没有#include "ExoDll1.cpp"
。
答案 1 :(得分:1)
此错误不是来自编译器,而是来自链接器。这意味着编译器没有发现任何错误,特别是在任何一个编译单元中没有重复的符号定义。但是,生成.dll库的链接器会加载多个编译单元,并在编译单元中找到符号的重复定义。
如果多个编译单元包含具有外部链接的相同代码,即如果您是#include
da源代码,或者如果在头文件(多个编译单元#include
中),则会发生这种情况函数已定义且未声明inline
。