我正在Visual Studio中编译这个OpenGL程序。在阅读了大量文章之后,我已经正确地进行了设置。我已将正确的库添加到链接器的其他依赖项中。但是我收到了这个错误:
错误LNK2019:函数_ _tmainCRTStartup中引用的未解析的外部符号 WinMain @ 16
我正在编译的代码是:
#include <windows.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>
void init(void)
{
glClearColor (0.0, 0.0, 0.0, 0.0);
glShadeModel (GL_FLAT);
}
void display(void)
{
glClear (GL_COLOR_BUFFER_BIT);
glColor3f (1.0, 1.0, 1.0);
glLoadIdentity (); /* clear the matrix */
/* viewing transformation */
gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
glScalef (1.0, 2.0, 1.0); /* modeling transformation */
glutWireCube (1.0);
glFlush ();
}
void reshape (int w, int h)
{
glViewport (0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
glFrustum (-1.0, 1.0, -1.0, 1.0, 1.5, 20.0);
glMatrixMode (GL_MODELVIEW);
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize (500, 500);
glutInitWindowPosition (100, 100);
glutCreateWindow (argv[0]);
init ();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutMainLoop();
return 0;
}
答案 0 :(得分:8)
Windows中有两种可执行文件:
唯一的区别是控制台可执行文件会自动打开控制台窗口,而C / C ++ CRT运行时会将标准stdout / stdin / stderr句柄关联到此窗口。否则这两种可执行类型之间没有区别 - 都可以创建新的Windows,绘制东西,使用OpenGL等......
在Visual Studio中,如果您创建控制台应用程序 - 那么它希望您的入口点被称为“main”。但对于GUI应用程序,它期望入口点函数被称为“WinMain”。因此,如果您不希望在应用程序启动时看到“控制台”窗口,则有两个选项:
使用第二个选项意味着您可以使用GLUT,将您的入口点称为“main”,并且在启动时没有打开控制台窗口。
答案 1 :(得分:0)
您可能正在使用某些非标准Microsoft扩展程序,但不希望您定义main
,而是WinMain
。
尝试将main定义为:
int _tmain(int argc, _TCHAR* argv[])
或
int WinMain(int argc, _TCHAR* argv[])
答案 2 :(得分:0)