コンテンツにスキップ

Top

工学社の「グラフィックス・アプリ」制作のためのOpenGL入門のサンプルコードをRaspberry Piで実行する方法

「グラフィックス・アプリ」制作のためのOpenGL入門 のサンプルコードをRaspberry Pi 4で実行する方法について述べる。

試してないけど、Pi3とかでも別に動くと思う。

raspi-config で GL Driver を有効にする

raspi-configを立ち上げる。

$ sudo raspi-config

"7 Advanced Options"を選択。

"A7 GL Driver" を有効にして終了(再起動するよ)

xorg-devをインストール

必要なコンポーネントをインストールする。

$ sudo apt update
$ sudo apt install -y xorg-dev

GLFWのインストール

git clone https://github.com/glfw/glfw
cd glfw
cmake .
make
sudo make install

GLEWのインストール

GLEW( http://glew.sourceforge.net/ )

$ sudo apt update
$ sudo apt install -y build-essential libxmu-dev libxi-dev libgl-dev
$ sudo apt install libegl1-mesa-dev

$ git clone https://github.com/nigels-com/glew.git

$ cd glew
$ cd auto
$ make SYSTEM=linux-egl

$ cd ../build
$ cmake ./cmake
$ cd cmake
$ make
$ sudo make install

LD_LIBRARY_PATHの設定

LD_LIBRARY_PATHを設定すべき正解の設定ファイルはどれなのだろうか?
とりあえず.bashrcに書く。

$ echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib' >> ~/.bashrc
$ source ~/.bashrc

サンプルコードのコンパイルに必要なコンポーネントをインストール

コンパイルに必要なコンポーネントをインストール。

$ sudo apt install -y libglu1-mesa-dev

サンプルコードをダウンロード

「グラフィックス・アプリ」制作のためのOpenGL入門 サポート情報 http://www.kohgakusha.co.jp/support/glfwopgl/index.html

からサンプルコードをダウンロードして任意のディレクトリに展開する。

サンプルコードのstep00をコンパイルして実行

コンパイル。

$ unzip sample.zip
$ cd sample
$ cd step01
$ make
g++ -g -Wall -std=c++11 -Iinclude -MM main.cpp > glfw3.dep
g++ -g -Wall -std=c++11 -Iinclude   -c -o main.o main.cpp
g++ -g -Wall -std=c++11 -Iinclude    main.o  -Llib -lglfw3_linux -lGLEW_linux -lGL -lXrandr -lXinerama -lXcursor -lXi -lXxf86vm -lX11 -lpthread -lrt -lm -ldl -o glfw3
/usr/bin/ld: 互換性のないを lib/libglfw3_linux.a スキップしました (-lglfw3_linux を探索している時)
/usr/bin/ld: -lglfw3_linux が見つかりません
/usr/bin/ld: 互換性のないを lib/libGLEW_linux.a スキップしました (-lGLEW_linux を探索している時)
/usr/bin/ld: -lGLEW_linux が見つかりません
collect2: error: ld returned 1 exit status
make: *** [Makefile:12: glfw3] エラー 1

???
エラーになったでごわす。

原因はMakefileの以下の部分。

LDLIBS  = -Llib -lglfw3_linux -lGLEW_linux -lGL -lXrandr -lXinerama -lXcursor \

ここの、-lglfw3_linux を -lglfw3 に、 -lGLEW_linux を -lGLEW に書き換える。

もう一度コンパイル。

$ make
g++ -g -Wall -std=c++11 -Iinclude    main.o  -Llib -lglfw3 -lGLEW -lGL -lXrandr -lXinerama -lXcursor -lXi -lXxf86vm -lX11 -lpthread -lrt -lm -ldl -o glfw3

成功。実行してみる。

$ ./glfw3

何も起きない。まぁ、何も起きないサンプルだからだけど。

もしこの時、

./glfw3: error while loading shared libraries: libGLEW.so.2.2: cannot open shared object file: No such file or directory
というエラーが出た場合は、LD_LIBRARY_PATHの設定がうまく行っていない。
(.bashrcにちゃんと書いていないか、書いたあと一旦端末を抜けていないか、sourceをしていないか)

サンプルコードのMakefileを一括修正

先程同様、全Makefileの-lglfw3_linuxと-lGLEW_linuxを修正しないといけない。いちいちやってられないので、以下のコマンドでまとめて修正。

$ cd .. (sampleディレクトリ直下に移動)
$ find ./ -name Makefile | xargs sed -i -e "s/lglfw3_linux/lglfw3/g"
$ find ./ -name Makefile | xargs sed -i -e "s/lGLEW_linux/lGLEW/g"

サンプルコードのstep01をコンパイルして実行

次はstep01をコンパイル。

$ cd ../step01
$ make
g++ -g -Wall -std=c++11 -Iinclude   -c -o main.o main.cpp
g++ -g -Wall -std=c++11 -Iinclude    main.o  -Llib -lglfw3 -lGLEW -lGL -lXrandr -lXinerama -lXcursor -lXi -lXxf86vm -lX11 -lpthread -lrt -lm -ldl -o glfw3

実行。

$ ./glfw3

真っ白いWindowが表示された!!

もし、以下のようなエラーが出た場合。

g++ -g -Wall -std=c++11 -Iinclude -MM main.cpp > glfw3.dep
g++ -g -Wall -std=c++11 -Iinclude   -c -o main.o main.cpp
In file included from main.cpp:3:
include/GL/glew.h:1205:14: fatal error: GL/glu.h: そのようなファイルやディレクトリはありません
 #    include <GL/glu.h>
              ^~~~~~~~~~
compilation terminated.
make: *** [<ビルトイン>: main.o] エラー 1

あなたは、上記手順で入れるように言った、以下のコマンドを実行していなかったのでしょう。

$ sudo apt install -y libglu1-mesa-dev

以上。