OpenGLとGLUTを使ってGCCでコンパイルする方法(Windows)

WindowsにMinGWをインストールしてGCCでGLUT(freeglut)を使ってみたのでそのメモ。
BorlandのBCCを使ってもできるようですが、GCCを使いたかったので。


TeXやQtを使ってる都合上、WindowsのコマンドプロンプトやPowerShellからではなく、
完全にWindowsから分離した別のコンソールから使う前提です。
Cygwinをインストールすれば一発でできるようですが、上記の理由からMinGW+MSYS2で環境構築します。
MinGWのgccとfreeglutをインストールするにはMSYS2を使ってパッケージ指定するのが楽なようなので
とりあえずMSYS2をインストールします。

MSYS2 installer

以下のサイトがとてもわかりやすかったです。

MSYS2 による gcc 開発環境の構築 – Qiita

デフォルトでは”C:\msys64\”にインストールされるようです。今回はデフォルト設定で進めました。

msys2_install

この方法ではcmd.exeでUNIXコマンドを実行してもパスを通さない限り対応しません。

cmd_screenshot

MSYS2からインストールするパッケージは以下の3つです。

  • mingw-w64-x86_64-gcc
  • mingw-w64-x86_64-gcc-libs
  • mingw-w64-x86_64-freeglut

MSYS2のパッケージマネージャはpacmanなので、”C:\msys64\mingw64_shell.bat”を実行して次のコマンドでインストールできます。

pacman -S mingw-w64-x86_64-gcc mingw-w64-x86_64-gcc-libs mingw-w64-x86_64-freeglut

mingw64_screenshot

インストール後、GLUTを利用したサンプルを書きます。

#include <stdlib.h>
#include <GL/glut.h>

void keyboard(unsigned char key, int x, int y);
void display(void);


int main(int argc, char** argv)
{
  glutInit(&argc, argv);
  glutCreateWindow("GLUT Test");
  glutKeyboardFunc(&keyboard);
  glutDisplayFunc(&display);
  glutMainLoop();

  return EXIT_SUCCESS;
}


void keyboard(unsigned char key, int x, int y)
{
  switch (key)
  {
    case '\x1B':
      exit(EXIT_SUCCESS);
      break;
  }
}


void display()
{
  glClear(GL_COLOR_BUFFER_BIT);

  glColor3f(1.0f, 0.0f, 0.0f);

  glBegin(GL_POLYGON);
    glVertex2f(-0.5f, -0.5f);
    glVertex2f( 0.5f, -0.5f);
    glVertex2f( 0.5f,  0.5f);
    glVertex2f(-0.5f,  0.5f);
  glEnd();

  glFlush();
}

Using freeglut or GLUT with MinGWより引用

この後opengl32とfreeglutを指定して実行すると無事にコンパイルできました。

g++ sample1.c -lopengl32 -lfreeglut && ./a.exe

glut_sample1

困ったこと

  • error: spawn: No such file or directory
    MinGW64なのにMinGW32のライブラリやgccを指定しているときにこのエラーが出ました。

  • undefined reference to `__imp___glutInitWithExit’
    未定義の参照があるようです。ライブラリをきちんと指定しているか確認してみてください。

  • fatal error: GL/glut.h: No such file or directory
    ライブラリがインストールされていないようです。

コメント