openFrameworks 0.9.8 と Qt Creator 4.3.1 を Linux で(2017)

グラフィックを勉強しようかと思います。

Processingがよさそうだったのですが、Linuxを使っているので、C++のほうが役に立つ機会があるだろうとopenFrameworksにしました。C++は入門書程度の知識くらいです。Quil(Clojure)にしようかとも思いました。Emacs を使っていて、しかも、初めて読んだプログラミングの本が「Emacs Lisp プログラミング入門」なのに、今だにLisp使いでないという、忸怩たる思いがあるからです。Lispは来年やります!

さて、ここで詳しく手順は紹介しません。英語ですが、公式サイトのLeaning を参考に、インストールやIDEのセットアップを行うのが良いと思います。

ただ、今回やってみてハマった点があったので紹介します。

openFrameworksでは、Qt Creatorを使う場合、パッケージ(Linux Mint 18.1ではver.3.5.4)ではなく、Qt公式サイトから最新版をダウンロードすべし、と記載されていました。Qt公式では最新版のバージョンは 5.9.1 です。

ところが、Qt Creatorのバージョンが新しすぎてしまったのか、うまくビルドできませんでした。

Qt Creatorでは、ビルドのためにQbsというものを使うらしく、その設定?がopenFrameworkでは、ofApp.qbsとその中で呼びだされているhelpers.jsというファイル内で行われています。

実際にexmaplesディレクトリ内の3DPrimitivesExampleプロジェクトをビルドしてみると、helpers.js内でqbsというファイルが無いというエラーが出てしまいました。

:-1: 警告: of_v0.9.8_linux64_release/libs/openFrameworksCompiled/project/qtcreator/modules/of/helpers.js:5 Cannot open ‘of_v0.9.8_linux64_release/libs/openFrameworksCompiled/project/qtcreator/modules/of/qbs’.

いろいろと検索してみましたが、解決策らしきものが見当たらないのでQt 公式サイトのマニュアルを見てみました。そこでhelpers.js内でのエラー箇所と関連がありそうなページを見つけました。このQtのリファレンスページです。後日、openFrameworksのフォーラムで問題が報告されているのを発見しましたので怪しげな英語で投稿してみました

Qbsというビルドツール?ではjavascriptで必要なServiceというようなものを読み込むようです。helpers.jsに記載されているProcessやらFileはこのServiceみたいです。

以下はhelpers.jsの先頭部分です。

var Process = loadExtension(“qbs.Process”);
var File = loadExtension(“qbs.File”);
var TextFile = loadExtension(“qbs.TextFile”);
var Environment = loadExtension(“qbs.Environment”);
var qbUtils = loadExtension(“qbs”);

エラーは最後の行で出ています。リファレンスではqbsというServiceについて言及しているところが無かったので、ここをコメントアウトしました。無くなったのでしょう。ちなみにhelpers.jsを単に更新するだけではエラーメッセージが全く変わりません。キャッシュみたいなものでしょうか。Qbsの再構築などというメニュー項目を実行しても変わりませんでしたので、結局ofAppでhelpers.jsを読み込んでいるところで、helpers.jsをhelpersABC.jsなどに変えて、一旦そこでエラーを敢えて出し、元にもどすと、ようやくhelpers.jsの変更が反映されました。誰かちゃんとした方法教えて下さい。

すると次のようなエラーが出ます。しかもさっきのエラーは3つでしたが、今回はこのエラーの下にも山ほど(338個)エラーが…

:-1: 警告: Suspicious use of qbs.Process during property evaluation. Should this call be in a Probe instead?

一旦諦めて普通にコマンドラインでmakeしました(これは問題なく成功。後述)が、翌日再度リファレンスを読んでみると、jsファイルでServiceを読み込む際の関数が違うことに気づきました。意外と最初のほうに書いてありますが、眠かったで見落としていたのでしょう。locadExtension()ではなく、reqiure() が正しいようです。関数名が変わった?

そうすると、helpers.jsは以下のようになります。

var Process = require(“qbs.Process”);
var File = require(“qbs.File”);
var TextFile = require(“qbs.TextFile”);
var Environment = require(“qbs.Environment”);

ビルドして実行も成功。binディレクトリの中に実行ファイルが出来ました。

もし、Qt Creatorを使わない場合は、examples以下の各プロジェクトディレクトリ内で、makeすれば良いです。

make
make RunRelease

です。make RunReleaseはmakeしたあとのメッセージ内で表示されます。

以上!

 

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)