はじめに
今日から学校でプログラミング演習の授業が始まった。プログラミング演習では OpenGL を用いてゲームを作るらしく、はじめは環境構築だった。 OpenGL の他に png を扱うための glpng というライブラリを導入する必要があったが、これを本家ソースから macOS 上でコンパイルしようとするとハマったので対処法をメモする。
TL; DR
- Clang だとコンパイルできない
- ソースコードの修正が必要
- OpenGL と GLUT のフレームワークと一緒にコンパイルする必要がある
gcc のインストール
macOS にはデフォルトで gcc が入っていない。正確にはコマンド自体は存在するのだが中身は Clang となっている。「自分のことを gcc だと思ってる精神異常 Clang」では glpng をコンパイルすることができないため、Homebrew で gcc をインストールする。なお、この gcc はコマンド名がgcc
ではなくgcc-<メジャーバージョン>
となるので注意。今回はgcc-11
が入った。
brew install gcc
# Clangらしき記述がなければOKgcc-11 --version
ライブラリのソースを取得
どうやら本家サイトが落ちているらしく、森北出版株式会社刊 「Springs of C」サポート web ページからダウンロードした。glpng.zip
をダウンロードすれば良い。ダウンロードしたら適当な場所に展開しておく。
Makefile
とソースコードの修正
そのままではライブラリをコンパイルできないのでsrc/
下のMakefile.LINUX
とglpng.c
を修正する。
# (省略)...
CC = gccCXX = g++CC = gcc-11CXX = g++-11CFLAGS = -pipe -Wall -W -O2 -fno-strength-reduceCXXFLAGS= -pipe -Wall -W -O2 -fno-strength-reduceINCPATH = -I../includeINCPATH = -framework OpenGL -framework GLUT -I../includeAR = ar cqsRANLIB =MOC = moc
// (省略)...
#include <GLUT/glut.h>#include <GL/glpng.h>#include <GL/gl.h>#include <stdlib.h>#include <math.h>#include "png/png.h"
修正した後、src/
でmake -f Makefile.LINUX
すればlib/
に glpng のライブラリが生成されている。
サンプルプログラムの修正
Example/
にTest.c
というサンプルプログラムがあるが、これもそのままでは動かないので修正する。
// (省略)...
#include <gl/glpng.h>#include <gl/glut.h>#include <GLUT/glut.h>#include <stdlib.h>
// (省略)...
void main() {int main(int argc, char **argv) { pngInfo info; GLuint texture;
glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); glutInitWindowSize(300, 300); glutCreateWindow("glpng test");
サンプルプログラムのコンパイル
サンプルプログラムもgcc
でコンパイルしなければならず、更に OpenGL、GLUT といったフレームワークやコンパイルした glpng ライブラリなどのリンクが必要である。Example/
で以下のコマンドでコンパイルできる。
gcc-11 -Wall Test.c -framework GLUT -framework OpenGL -I../include -L../lib -lglpng
生成されたa.out
を実行し画像が回転している表示がされれば成功。
最後に
以下の記事・本を参考にした。
書いた人