Visual C ++ - 找到一个或多个多重定义的符号

时间:2012-06-14 06:52:33

标签: c++ dll

每当我开始构建我的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);
}

我尝试创建一个新项目并删除旧项目,但同样的问题仍然存在..这似乎是什么问题?

2 个答案:

答案 0 :(得分:2)

只有一个翻译单元(例如ExoDll1.cpp)才能显示此错误消息。例如,您可能会在不知不觉中尝试同时编译此代码的多个版本。

检查您的项目并删除您不想编译的任何源代码。

确保项目中的任何地方都没有#include "ExoDll1.cpp"

答案 1 :(得分:1)

此错误不是来自编译器,而是来自链接器。这意味着编译器没有发现任何错误,特别是在任何一个编译单元中没有重复的符号定义。但是,生成.dll库的链接器会加载多个编译单元,并在编译单元中找到符号的重复定义。

如果多个编译单元包含具有外部链接的相同代码,即如果您是#include da源代码,或者如果在头文件(多个编译单元#include中),则会发生这种情况函数已定义且未声明inline