読者です 読者をやめる 読者になる 読者になる

音楽とともに気ままなブログ

暇さえあればピアノ弾いてます。

*** 最新記事 ***

【Mac El Capitan】Xcode7でOpenGL(GLFW3)が動くまでのまとめ。

OpenGL Xcode

 

 

研究でOpenGL(GLUT)を使うことになって、いろいろ調べて見ると

GLUTの更新は現在止まっているらしく、その後継ぎはGLFWというものらしいと

いうことで、導入してみることにした。(言い回しの正確さはスルーで..笑)

 

結果をいうと、サンプルコードのウィンドウの生成には成功した。のでひとまず

成功したと言える。

(調べていると、古い情報ばかりでMacのVer.の問題などがあり困難した。)

 

※備考

openGL系の最新はVulkanというものらしい。でもopenGLの取っ掛かりとしては

純粋に近いものが良いということで、GLFWをまずは導入してみることにした。

 

 

やること・目標

 

Xcode 用に GLFWとGLEWをビルドする。

・サンプルコードがエラー無くビルドされる。

 

 

1.  必要なもの

 
--Mac OS X El Capitan 10.11.5

(・Macport  or Homebrew -- 必要なのかな?詳しくない) 

Xcode

--Xcode 7.3.1 

・GLFW3   公式ホームページよりダウンロード ( http://www.glfw.org/ )

--使用したのはglfw-3.2

・GLEW  公式ホームページよりダウンロード ( http://glew.sourceforge.net/ )

--使用したのはglew-1.13.0

・Cmake.app 公式ホームページよりダウンロード ( https://cmake.org/download/ )

--使用したのはCmake 3.6.0.app

 

2. インストール手順

 

 

・まず上記のものをそれぞれダウンロード&インストールしておく。

GLFW・GLEWはデスクトップに保存した。

 

2.1 GLEW

 

・ ダウンロードしたファイルを解凍して出てきたフォルダの中にある

Makefileを編集する。

・44行目の GLEW_DEST ?= /usr  ⇒ GLEW_DEST = /usr/local に変更

・ターミナルを開いて、glewフォルダディレクトリで make all を実行。

・(少し時間がかかる)終わったら 、 sudo make install を実行。

 

・/usr/lical/include/ にglew.h  & /usr/local/lib/ にlibGLEW.a が作成されていることを

確認する。

※ Finder上部メニュー [移動] > [フォルダへ移動]で /usr/ 以下が見れる。

 

2.2  GLFW 

 

・GLEW同様に解凍する。

・ターミナルを開いて解凍したフォルダディレクトリで cmake .

※ ドット(.)のつけ忘れに注意

 

ここで問題が発生した。command not found

 

ここで使うのが、Cmake.app

 

だが、結局、これをGUIで使う方法を取らなかった。 

ただ最初はこのglfwフォルダに

mkdir build でbuildというフォルダを作成して、そこに

アプリでCmakeはしてみたので、必要かもしれない。(未確認)

 

そこで

 ターミナル上で cmake する方法

 

Cmake.app内のパッケージの各コマンドを/usr/bin以下にシンボルリンクを張る。

 

移動するのは、

ccmake   cmake  cmake-gui  cmakexbuild  cpack  ctest  

これは"/Applications/Cmake X.X.X.app/Contents/bin/"内にあるもの全て。

※ X.X.X は自分の場合は3.6.0

 

しかし、OSX El Capitan では新しいSIPというセキュリティ機能がついているために、

sudoコマンド付け(管理者権限)ても、

Operation not permittedとでて、/usr 配下などに書き込み操作ができない。

 

なので

 その対処法として

 

SIP(Rootless)を無効にする。

これはリカバリーモードでないと実行できないので、

一度Macを再起動します。

(1)再起動を押したら、[Command+R]を押してリカバリーモードで起動します。

(2)上部のメニューから[ユーティリティー] > [ターミナル]を選択し、ターミナル起動

(3)以下のコマンドで「SIP」の状態を確認&変更

 

【確認】

$ csrutil status

System Integrity Protection status : enabled.

 

【変更】

$ csrutil disable

Successufully disabled System Integrity ...... Please restart ..... to take effect.

 

【再起動しろとの事なので】

$ reboot

 

(4)通常ログインをして、再度ターミナルを開き変更されているか確認する。

$ csrutil status

disableになっている

※ すべての作業が終わったら戻して置くのがよいでしょう。

 

これでsudoコマンドなどが許可されるので、ファイルの移動を行う。

コマンドは以下。

 

sudo ln -s "/Applications/Cmake X.X.X.app/Contents/bin/ccmake" /usr/bin/ccmake

 

ccmake の部分を変更するだけであとは同様のコマンドを実行。

 

・これで ターミナル上でコマンドライン版 cmake .ができるようになったので

 cmake . を実行。

・終わったら、make コマンド & sudo make install コマンド を実行。

 

*参考* 

EI Capitanでsudo付けているOperation not permittedが出た時の対処法 - いつかエンジニアになりたい

MacOSXでcmakeのコマンドライン版を使えるようにする - Qiita

 

3. ファイルの移動

 

GLEW同様に /usr/lical/ 配下に必要なファイルが作成されなかったので、

解凍したデスクトップのフォルダからファイルを直接移動またはコピーする。

 

(1) /glfw-3.2/include/ から GLFWフォルダを /usr/local/include/に。

(2) /glfw-3.2/src/ からlibglfw3.aを /usr/local/lib に 。

移動する。

 

4. Xcodeの設定

 

・適当なプロジェクトを(Command Line Toolなどで) 言語C++で作成する。

 

(1) Build Setting の Header Search Path に /usr/local/include を設定する。

(2) Build Setting の Library Search Path に /usr/local/libを設定する。

 

(3)Build Phases の Link Binary With Libraries に /usr/local/lib/libglfw3.aをD&Dする。

(4)Build Phases の Link Binary With Libraries に /usr/local/lib/libGLEW.aをD&Dする。

※ D&D  : ドラッグ&ドロップ

(#)Build Phases の Link Binary With Libraries に

OpenGL.framework

Cocoa.framework

IOKit.framework

CoreVideo.framework   を追加。

 

(※) 必要かはわからないが、

Build Setting > Other Linker Flags に

-lglfw3  -lGLEW -framework OpenGL -framework CoreVideo -framework IOKit

-framework Cocoa を追加。

 

 

以上で設定は終わり。

 

*参考*

GLFWとGLEWをXcode用にビルドする - おもちゃラボ

GLFW + XCode に挑戦するよ 1日目 - Qiita

 

5. サンプルコードをビルドしてみる。

 

GLFW公式ホームページのドキュメントにあるサンプルを実行してみた。

 

同様にすると、Hello worldのウィンドウが出たはずである。

 

さーて、これからだあ。

 

*参考*

http://marina.sys.wakayama-u.ac.jp/~tokoi/GLFW.pdf

 

 

〜追記〜

 

Xcodeを使用せず、シェルコマンドを使ってプログラムを作成するために

Makefileを作成する。

ソースコードを置く空のフォルダ(フォルダ名:sample)を作成する。

・ソールコードと以下の内容のMakefileを置く。

 

Makefile

CXXFLAGS = -g -Wall -I/usr/local/include
LDLIBS = -L/usr/local/lib -lglfw3 -lGLEW -framework OpenGL -framework CoreVideo -framework IOKit -framework Cocoa
OBJECTS = $(patsubst %.cpp,%.o,$(wildcard *.cpp))
TARGET = sample
.PHONY: clean
$(TARGET): $(OBJECTS)
--[tab]で字下げ-- $(LINK.cc) $^ $(LOADLIBES) $(LDLIBS) -o $@
clean:
--[tab]で字下げ-- -$(RM) $(TARGET) $(OBJECTS) *~ .*~ core
 

 

これで make コマンドで実行プログラムが作成される。