macOS 上で glpng をコンパイルして動かす
はじめに
今日から学校でプログラミング演習の授業が始まった。 プログラミング演習では 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らしき記述がなければOK
gcc-11 --version
ライブラリのソースを取得
どうやら本家サイトが落ちているらしく、森北出版株式会社刊 「Springs of C」サポート web ページからダウンロードした。glpng.zip
をダウンロードすれば良い。
ダウンロードしたら適当な場所に展開しておく。
Makefile
とソースコードの修正
そのままではライブラリをコンパイルできないのでsrc/
下のMakefile.LINUX
とglpng.c
を修正する。
# (省略)...
CC = gcc
CXX = g++
CC = gcc-11
CXX = g++-11
CFLAGS = -pipe -Wall -W -O2 -fno-strength-reduce
CXXFLAGS= -pipe -Wall -W -O2 -fno-strength-reduce
INCPATH = -I../include
INCPATH = -framework OpenGL -framework GLUT -I../include
AR = ar cqs
RANLIB =
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
を実行し画像が回転している表示がされれば成功。
最後に
以下の記事・本を参考にした。