当我编译一个DLL项目时,为什么会收到错误LNK1561“必须定义入口点”的消息?

8
我尝试编译一个非常简单的动态库项目,生成.dll文件。 该项目的名称为“Library”。 我正在使用Visual Studio 2015,并且项目属性如下:

调试属性

发布属性

该项目中只有两个文件: ClassA.h和ClassA.cpp。

ClassA.h中的代码如下:

#ifndef CLASSA_H
#define CLASSA_H

using namespace std;

#ifdef LIBRARY_EXPORTS
#define CLASSA_API __declspec(dllexport) 
#else
#define CLASSA_API __declspec(dllimport) 
#endif

class ClassA
{
public:
    static CLASSA_API void func();
};


#endif

ClassA.cpp中的代码是:

#include "ClassA.h"
#include <iostream>


void ClassA::func()
{
    cout << "SUCCESS!" << endl;
}

当我尝试编译这个项目时,我收到了以下错误:

严重性 代码 描述 项目 文件 行 错误 LNK1561 入口点必须被定义 Library C:\Users\UX303\Documents\Visual Studio 2015\DLLTest\Library\LINK 1


是的,但我没有得到好的结果。 - Radioga
这很难出错,入口点内置于C运行时库中,不链接它会产生不同的错误。我只能想到一件事,即使用Project > Properties > Linker > Advanced >“Entry Point”设置。当您尝试构建DLL的x64版本时,这可能会成为问题,如屏幕截图所示,应用于函数的名称修饰是不同的。没有前导下划线,也没有@后缀。请注意,这样做相当冒险,CRT将不会被初始化。 - Hans Passant
2个回答

16

你的配置可能不正确。

请确保仔细检查您的“活动配置”(Debug / Release),以确定您是否真正正在构建DLL。

我刚犯了这样的错误,并遇到了这个问题。


2
当你从调试模式切换到发布模式时,配置文件会被重置为EXE,而不是DLL。因此,请检查配置。另外,如果你要部署到另一台机器上,必须将其设置为发布模式。还有,我不确定这是否是100%必需的,但是有一个名为“Microsoft C++ Redistributable”的软件包需要在客户端机器上安装。一旦完成这两个步骤,错误就会消失。 - Rob

3

在64位机器上,当“解决方案平台”设置为“x86”时,我遇到了相同的错误。当我将“解决方案平台”设置为“x64”时,错误消失了。


难以置信,我在阅读了一个小时后才意识到我的平台由于某种原因被设置为x86。 - iedoc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接