0

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

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

4

2 回答 2

2

此错误消息不能仅与单个翻译单元(例如ExoDll1.cpp)一起出现。例如,您可能在不知不觉中尝试同时编译此代码的多个版本。

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

确保您的项目中没有#include "ExoDll1.cpp"任何内容。

于 2012-06-14T07:23:20.423 回答
1

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

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

于 2012-06-14T08:56:34.840 回答