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

WindowsにMinGWをインストールしてGCCでGLUT(freeglut)を使ってみたのでその記録をメモしておきます。
BorlandのBCCを使ってもできるようですが、今回はGCCを使いたかったのでGCCを使う場合についてのメモです。

インストール手順

MSYS2からMinGWをインストールし、MinGW+MSYS2の環境を構築します。Cygwinをインストールしても一発でできるようです。
MinGWはWindows用のGNUのツールチェイン群で、MSYS2はCygwinからフォークされたPOSIX互換レイヤーのようです[1]日記/2017/10/09/MSYS2,MinGW64,Cygwinの違い – Glamenv-Septzen.net
https://www.glamenv-septzen.net/view/1422
。MinGWで作成したexeは単体で実行できる形式にできますが、MSYS2やCygwinで作成したexeはmsys-2.0.dllに依存するようです。
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
    • ライブラリがインストールされていないようです。

更新履歴

2019年6月9日 カテゴリを変更しました。

   [ + ]

How-to
スポンサーリンク
ぜひこのエントリをシェアしてください!

Memotekiの管理人です。このブログには学んだことや共有しておきたいことをマイペースにメモしていきます。

Tiryohをフォローする
Memoteki

コメント

  1. ntakatsu より:

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

    大変役に立ちました。Linuxで作成した地形表示プログラムを再ビルドしてWindowユーザに送ることができました。ありがとうございます!

    • Tiryoh より:

      コメントありがとうございます!お役に立てたようで嬉しいです!