(Updated )

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

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

インストール手順

MSYS2からMinGWをインストールし、MinGW+MSYS2の環境を構築します。Cygwinをインストールしても一発でできるようです。 MinGWはWindows用のGNUのツールチェイン群で、MSYS2はCygwinからフォークされたPOSIX互換レイヤーのようです((日記/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を利用したサンプルを書きます。

sample1.c
#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日 カテゴリを変更しました。

Share — X · Bluesky · はてブ ·