Win32应用程序LNK2001:未解析的外部符号_main

时间:2013-11-05 16:21:32

标签: c++ winapi visual-studio-2012 linker static-linking

我一直在尝试用VS2012上的GUI(不是一个简单的控制台应用程序)制作一个WIN32应用程序,而且我遇到了这个错误。我的项目是发布配置。我的主要功能如下:

int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
    LPSTR lpCmdLine, int nCmdShow)
{

    return DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN), NULL, DlgProc);
}

我尝试了什么:

1)使用以下设置创建新的WIN32项目:

  • 申请类型 - > Windows应用程序
  • 其他选项 - >空项目(没有SDL!)
  • 未选中其他选项

2)在Unicode和多字节字符集之间切换

3)更改子系统(从Windows(/ SUBSYSTEM:WINDOWS)更改为未设置)

4)添加入口点(main; _main; WinMain)

5)添加#undef _ATL_MIN_CRT(我很确定它无论如何都被禁用了,但仍然是为了额外的保险......)

这些都没有解决我的问题。我搜索了互联网,但没有发现任何有类似问题的人(创建WIN32应用程序)已经解决了他们的问题。

编辑:我也在使用Allegro 5库,我正在使用/ MT构建程序。

欢迎任何建议。

2 个答案:

答案 0 :(得分:1)

问题是您对main函数使用了错误的调用约定。正如Name Decoration的文档所解释的那样,带有前导下划线且没有其他装饰的符号表示 C调用约定

main功能的签名应为:

extern "C" __cdecl void main();

请注意,返回值和参数列表都不是名称修饰的一部分,因为调用者负责清理。这意味着任何函数签名都可用于满足链接器。

答案 1 :(得分:0)

经过一番搜索,我找到了答案。

我需要做的就是定义ALLEGRO_NO_MAGIC_MAIN。