![](/img/trans.png)
[英]LNK2019: unresolved external symbol _main referenced in function __tmainCRTStartup
[英]error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup, but this time it's NOT a Windows/Console problem!
所以,臭名昭著的错误又回来了。 该项目抱怨它找不到 main() 方法(这就是错误的含义,对)。
但是,我确实有一个主项目,而我的项目应该是一个控制台项目。 它以前有效,所以我知道不是那样。
此外,该项目有太多的类和文件,我无法将它们全部发布,因此我将根据您的要求发布您需要的任何类。
它是 Visual Studio 2010 上的 C++、OpenGL 和 SDL 游戏。这不是任何库的问题,因为它在突然莫名其妙地显示此链接器错误之前工作正常。
编辑: main() 方法:
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH | GLUT_ALPHA);
glutCreateWindow("Game");
glEnable(GL_DEPTH_TEST);
glEnable(GL_NORMALIZE);
glEnable(GL_COLOR_MATERIAL);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
g = Game();
glutInitWindowSize(g.getScreenWidth(), g.getScreenHeight());
//glutPositionWindow(1280, 50);
// Callbacks
glutDisplayFunc(handleRedraw);
glutReshapeFunc(handleResize);
glutMouseFunc(handleMouseClicks);
glutPassiveMotionFunc(handleMouseOvers);
glutKeyboardFunc(handleKeyboardEvents);
glutTimerFunc(50, moveItemToInventory, 0);
glutMainLoop();
return 0;
}
SDL_main.h 是从 SDL.h 自动包含的,因此您总是会遇到令人讨厌的 #define。
写就好了:
#include <SDL.h>
#undef main
它应该可以正常工作
另一种选择实际上是用通常的参数定义你自己的 main
int main(int argc, char *args[])
{
// Your code here
}
那应该摆脱错误。
然后,如果您不使用这些参数并且您还想摆脱编译器警告,您可以在主函数中使用该技巧。
(void)argc;
(void)args;
SDL 文档中的默认解决方案:
tl;博士:
#define SDL_MAIN_HANDLED
#include "SDL.h"
完整示例:
当不使用 SDL_main() 作为入口点时,使用此函数可以避免 SDL_Init() 失败。
#define SDL_MAIN_HANDLED
#include "SDL.h"
int main(int argc, char *argv[])
{
SDL_SetMainReady();
SDL_Init(SDL_INIT_VIDEO);
...
SDL_Quit();
return 0;
}
罪魁祸首很可能是SDL_main.h
。 检查您是否不包含该文件,那里有一个讨厌的定义:
#define main SDL_main
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.