1

この OpenGL プログラムを Visual Studio でコンパイルしています。多数の記事を読んだ後、適切に設定しました。リンカーの追加の依存関係に正しいライブラリを追加しました。しかし、私はこのエラーが発生しています:

エラー LNK2019: 未解決の外部シンボルWinMain@16 が関数で参照されています _ _tmainCRTStartup

私がコンパイルしているコードは次のとおりです。

#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;
}
4

3 に答える 3

10

Windowsには2種類の実行可能ファイルがあります。

  1. コンソール
  2. GUI(Windows)

唯一の違いは、コンソール実行可能ファイルがコンソールウィンドウを自動的に開き、C / C++CRTランタイムが標準stdout/stdin/stderrハンドルを関連付けてこのウィンドウに移動することです。それ以外の場合、これら2つの実行可能ファイルの種類に違いはありません。どちらも新しいWindowsの作成、描画、OpenGLの使用などを行うことができます。

Visual Studioでは、コンソールアプリケーションを作成すると、エントリポイントが「メイン」と呼ばれることが期待されます。ただし、GUIアプリケーションの場合、エントリポイント関数は「WinMain」と呼ばれる必要があります。したがって、アプリケーションの起動時にコンソールウィンドウを表示したくない場合は、次の2つのオプションがあります。

  1. プロジェクトリンカーの設定を変更して、GUIアプリケーションを構築していることを示します([プロジェクトのプロパティ]->[リンカー]->[システム]->[Subystem = Windows])。これには、エントリポイント関数をWinMainと呼ぶ必要があります:http://msdn.microsoft.com/en-us/library/ff381406.aspx
  2. GUIアプリケーションを使用したいが、エントリポイントを「メイン」と呼びたい場合でも、リンカにそのことを示します。これは、[プロジェクトのプロパティ]->[リンカー]->[詳細設定]->[エントリポイント]=mainCRTStartupで実行できます。そこにメインを置かないでください。mainCRTStartupを配置します。これは、標準Cライブラリを初期化し、メイン関数を自動的に呼び出す特別なC / C++CRT関数です。この設定に関するドキュメントは次のとおりです:http://msdn.microsoft.com/en-us/library/f9t8842e.aspx

2番目のオプションを使用すると、GLUTを使用でき、エントリポイントを「メイン」と呼び、起動時にコンソールウィンドウを開くことができなくなります。

于 2012-04-14T19:22:07.420 に答える
0

プロジェクトは、Windows アプリケーションではなく、コンソール アプリケーションとして作成する必要があります。

プログラムをコンソール アプリにしたくない場合は、GLUT の使用をスキップする必要があります。次に、通常の Windows アプリケーションを作成し、独自の OpenGL レンダリング ウィンドウを作成します。これはかなり複雑なプロセスですが、NeHeには OpenGL プログラミングのすべてのニーズに対応するチュートリアルがあります。この場合、私はこれをお勧めします。

于 2012-04-14T18:05:15.420 に答える
0

おそらく、定義することを期待していない非標準の Microsoft 拡張機能を使用していますmainが、WinMain.

main を次のように定義してみてください。

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

また

int WinMain(int argc, _TCHAR* argv[])
于 2012-04-14T18:01:30.420 に答える