【问题标题】:LNK2001 unresolved external symbol _main in .dll with DllMain declared?LNK2001 .dll 中未解析的外部符号 _main 并声明了 DllMain?
【发布时间】:2025-11-27 15:40:01
【问题描述】:

我在 VS 中编译时遇到错误:

LNK2001 无法解析的外部符号_main 文件:MSVCRT.lib(exe_main.obj)

此错误仅在 Release x86 中编译时发生,而不是在 Debug x86 中发生。

 #include "includes.h"

BOOL APIENTRY DllMain(
    HINSTANCE handle,
    DWORD fdwReason,
    LPVOID lpReserved) 
{
    switch (fdwReason)
    {
    case DLL_PROCESS_ATTACH:
        AllocConsole();
        freopen("CONIN$", "r", stdin);
        freopen("CONOUT$", "w", stdout);
        _beginthreadex(NULL, 0, directxThread, 0, 0, 0);
        break;

    case DLL_THREAD_ATTACH:
        break;

    case DLL_THREAD_DETACH:
        break;

    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}

【问题讨论】:

  • 项目设置有问题,我们看不到
  • 项目>属性>常规>“应用程序类型”设置。对 Debug 配置进行更改而忘记对 Release 配置进行更改是一个标准错误。左上组合。请选择正确的项目模板,这样您就不必更改它。
  • 您的 IDE 是否可以在 Release x86 中配置为编译 exe(cli / windows 应用程序)?
  • 你是故意setting up a deadlock吗?
  • @EthanHammond 这个问题解决了吗?

标签: c++ winapi dll


【解决方案1】:

这可能是您的 IDE/编译器命令的问题。如果可能,您应该检查启用发布模式时发送到cl.exe(Microsoft 编译器)的确切命令,并确保编译器命令中存在 MSVCRT.lib。请参阅this link 了解更多信息。

如果 MSVCRT.lib 不在您的编译命令中,如果您使用 Visual Studio 之类的 IDE,则必须在项目设置中将 MSVCRT.lib 作为附加输入/依赖项添加到编译器。如果您使用的是命令行,则只需添加术语即可。

【讨论】:

    最近更新 更多