blog.s2n.tech

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が入った。

Terminal window
brew install gcc
# Clangらしき記述がなければOK
gcc-11 --version

ライブラリのソースを取得

どうやら本家サイトが落ちているらしく、森北出版株式会社刊 「Springs of C」サポート web ページからダウンロードした。glpng.zipをダウンロードすれば良い。ダウンロードしたら適当な場所に展開しておく。

Makefileとソースコードの修正

そのままではライブラリをコンパイルできないのでsrc/下のMakefile.LINUXglpng.cを修正する。

src/Makefile.LINUX
# (省略)...
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
src/glpng.c
// (省略)...
#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というサンプルプログラムがあるが、これもそのままでは動かないので修正する。

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/で以下のコマンドでコンパイルできる。

Terminal window
gcc-11 -Wall Test.c -framework GLUT -framework OpenGL -I../include -L../lib -lglpng

生成されたa.outを実行し画像が回転している表示がされれば成功。

最後に

以下の記事・本を参考にした。