簡體   English   中英

在Visual Studio 2010中使用OpenGL-錯誤LNK2019:函數___tmainCRTStartup中引用了無法解析的外部符號_WinMain @ 16

[英]Using OpenGL in Visual Studio 2010 - error LNK2019: unresolved external symbol _WinMain@16 referenced in function ___tmainCRTStartup

我正在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;
}

Windows中有兩種可執行文件:

  1. 安慰
  2. GUI(Windows)

唯一的區別是控制台可執行文件會自動打開控制台窗口,而C / C ++ CRT運行時會將標准的stdout / stdin / stderr句柄關聯到該窗口。 否則,這兩種可執行文件類型之間沒有區別-兩者都可以創建新的Windows,繪制事物,使用OpenGL等。

在Visual Studio中,如果您創建控制台應用程序-那么它期望您的入口點被稱為“主”。 但是對於GUI應用程序,它希望入口點函數稱為“ WinMain”。 因此,如果您不想在應用程序啟動時看到控制台窗口,則有兩個選擇:

  1. 更改項目鏈接器設置以指示您正在構建GUI應用程序(項目屬性->鏈接器->系統-> Subystem = Windows)。 這將需要將您的入口點函數稱為WinMain: http : //msdn.microsoft.com/zh-cn/library/ff381406.aspx
  2. 指示鏈接器,即使您想使用GUI應用程序,但也希望將您的入口點稱為“ main”。 您可以在項目屬性->鏈接器->高級->入口點= mainCRTStartup中執行此操作。 不要放在那邊。 放置mainCRTStartup-它是特殊的C / C ++ CRT函數,它初始化標准C庫並自動調用您的main函數。 以下是有關此設置的文檔: http : //msdn.microsoft.com/zh-cn/library/f9t8842e.aspx

使用第二個選項意味着可以使用GLUT,將入口點稱為“ main”,並且在啟動時沒有打開控制台窗口。

您可能正在使用一些非標准的Microsoft擴展,它們不希望您定義main ,而是WinMain

嘗試將main定義為:

int _tmain(int argc, _TCHAR* argv[])

要么

int WinMain(int argc, _TCHAR* argv[])

您應該將項目創建為控制台應用程序,而不是Windows應用程序。

如果您希望程序成為控制台應用程序,則需要跳過使用GLUT。 然后,您要做的就是創建一個普通的Windows應用程序並創建您自己的OpenGL渲染窗口。 這是一個相當復雜的過程,但是NeHe有滿足您所有OpenGL編程需求的教程。 在這種情況下,我推薦這個

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM