ホームページmini2440>その2・MacでのQtクロス開発は絶望的??

その2・MacでのQtクロス開発は絶望的??

目次
 目的と経緯

 引き続き、mini2440の開発環境構築について試行します。
 今回は、Mac上でQtのクロス開発の環境ができるかどうかを検証します。

 なお、検証マシンはMac mini mid 2010、OSは10.7と10.6です。
 また、各バージョンは試行時のもので、その後更新されている場合があります。


 方針

 QtはMac版も出ていて、Macで動作するソフトを作ることができます。

 また、Mac版のQtを使って、ARM向けのクロスビルドを行い、ARM向けのバイナリを生成することも「理論上は」可能ということになっています。
 まずは例によって、ネットで情報収集(この時点では日本語のページを主体に検索)してみましたが、そのまま適用できるような情報は得られませんでした。
(「ARMをMacで」「QtをMacで」はヒットするが、「MacでARM向けQt」は、見つけられず。)
 なので、とりあえずLinux版を参考に進めることとしました。

 ARM向けクロスビルドのためには、それ用のQtライブラリが必要になりますが、Linux同様、Macでも自分でソースからビルドしなければなりません。
理由は、組み込み向けはMPU(アーキテクチャ)ごとにチューニングされたライブラリを用意しなければならないが、MPUの種類が多すぎてメーカ側では対応しきれない、ということのよう。
 Qtライブラリ本体はNokiaのページから入手できますが、その他にクロスビルド用のツールチェーン(gcc)が必要になります。

 今回はお手軽に、Mac向けに用意されたツールチェーンを利用させて頂くことにしました。以下の二つです。
(注:両方必要という意味ではない。片方あればビルドは可能。両方用意したのは、うまくいかなかったときの代替とするため。)

 ビルドしてみる(失敗)

 まずは、各開発元のサイトから、必要なファイルをダウンロードしました。

 参考サイト(1):YAGARTO - Browse /YAGARTO for Mac OS X/20111119 at SourceForge.net
 参考サイト(2):devkitPro - Browse /devkitARM at SourceForge.net
 参考サイト(3):Qt のダウンロード — Qt - A cross-platform application and UI framework

 ビルドの手順は、
  1. YAGARTOとdevkitARMをインストール
    ・インストール方法は、YAGARTOは指示通り、devkitARMはFinder上でダブルクリック。
    ・インストール場所は、YAGARTOは推奨の「~/yagarto」、devkitARMは「~(ユーザーホーム直下)」

  2. Qtをインストール
    ・ダウンロードページで「Qt 4.8.1 for Embedded Linux(229 MB)」を選択。
    ・解凍は、ターミナルで以下を実行
    # tar zxvf qt-everywhere-opensource-src-4.8.1.tar.gz -C /opt

  3. qt-everywhere-opensource-src-4.8.1/mkspecs/qws/linux-arm-g++/qmake.confを編集
    ・YAGARTOの場合:「arm-linux-」を「arm-none-eabi-」に
    ・devkitARMの場合:「arm-linux-」を「arm-eabi-」に

  4. パスを通す。
    ・YAGARTOの場合:
    # export PATH="$PATH:$HOME/yagarto/yagarto-4.6.2/bin"
    # export PATH="$PATH:$HOME/yagarto/yagarto-4.6.2/tools"
    ・devkitARMの場合:
    # export PATH="$PATH:$HOME/devkitARM/bin"

  5. configureを実行
    ・オプションは、以下のとおり。
    echo yes | ./configure -opensource -embedded arm -xplatform qws/linux-arm-g++ -no-webkit -qt-libtiff -qt-libmng -qt-mouse-tslib -qt-mouse-pc -no-mouse-linuxtp
    ・ここでtslibが見つからないというエラーが出たので、ひとまず外してみた。
    echo yes | ./configure -opensource -embedded arm -xplatform qws/linux-arm-g++ -no-webkit -qt-libtiff -qt-libmng -qt-mouse-pc -no-mouse-linuxtp
    ・すると、configureは通った。

  6. makeを実行
    ・いずれのツールチェーンを用いても、途中でエラーが出て止まってしまった。
    ・オプションを少し弄ってみたりしたが、エラーの発生個所が多少ズレるくらいで、通らないことに変わりはなかった。
 ということで、失敗。


 考察

 検索の範囲を英語に広げてみた結果、本家のフォーラムで以下を見つけました。

 参考サイト(4):Qt Embedded Development on Mac OS X? | Qt DevNet forums | Qt Developer Network
 参考サイト(5):Cross compiling QT for ARM on Mac OS X Lion | Qt DevNet forums | Qt Developer Network

 参考サイト(4)のアドバイスは「どうしてもMacを使いたければ、仮想環境を導入してその上でLinuxを動かせ」、参考サイト(5)は返信ゼロと、いずれも芳しいものではありません。(注:いずれも2011.05.22時点)

 情報が少ないので、自分なりにエラーの原因を考えてみたのですが、使用したツールチェーンが自分の目的と合致していない、位しか思いつきませんでした。
 そこで、自分でツールチェーンをビルドすることを視野に入れて、再度情報を集めてみると、以下がヒットしました。

 参考サイト(6):組み込み Linux - クロスツールチェーン Codesourcery 対応環境

 つまり、ツールチェーンはターゲット側の実行環境(OSの有無や種別)で使い分けよ、ということのようです。
ツールチェーンの名前(例えばarm-none-linux-gnueabi-g++)の中にあるlinuxは、ターゲットボード上で稼働するOSがLinux、という意味のようだ。
ちなみに、「arm-none-linux-gnueabi」って何?と思って調べてみたところ、(結局、よく分かっていませんが、)
・名称は「ターゲット・トリプレット」らしい。
・当初は3つの組だった?のでトリプレットだったが、2つとか4つのものもそう呼ぶらしい。
・目的は、ハードウェアのバージョンやターゲットOSの違いを細かく指定することで、共存させても名前が被らないようにするため?
・命名規約は、定まったものがある訳ではないらしい。
・乏しい情報から推測した結果、「CPU名 - ベンダー名(ツールチェーンの組み合わせとの説も。noneとか省略もあり) - ターゲットOS名(使わない場合は省略?) - バイナリ構造(elf , eabi , ...)」とも思ったが、もちろん根拠なし。
 確かに言われてみると、YAGARTOは「arm-none-eabi」、devkitARMは「arm-eabi」と、どちらもターゲットボードにOSを入れることを想定していない様子です。
(見直したところ、devkitARMはニンテンドーDSやゲームボーイを前提としているようで、これならOS抜きがデフォかも。)
 一方、QtライブラリはLinuxを必要としている訳ですから、やはりツールチェーンを自分でビルドするしかなさそうです。

 ただし、ターゲットOSをLinuxとしたツールチェーンをMac上でビルドできるのか(例えば、ライブラリ類が不足しているとか互換性がないとかの問題は起きないか等、自分に取って)は全くの未知数です。
 まぁ、どうなるかは結局のところ、やってみないと分からない、か。
(こうなると、参考サイト(4)のアドバイスのとおり、あまり深入りしないことが賢明なのかもしれません。)

 ということで、先はまだまだ長そうです(笑)。

 「その3・MacでのQtクロス開発はできるかも??>できた」へ続く


 追補・ARMxについて

 参考サイト(6)で知った、Codesourceryをキーワードに検索を続けた結果、以下がヒットしました。

 参考サイト(7):UnhandledException/ARMx - GitHub

 READMEに「Mac OS X用のLinux/Qt向けツールチェーン」と明記されているため、期待を持てそうです。
 また、こちらでもツールチェーンのバイナリが公開されている(WIKIページ内の「Prebuilt Binaries」内)ことから、前回同様Qtのビルドから始めてみました。
 ですが、configureは通るもののmakeの途中でエラーが出て止まってしまうという、前回と同様の結果になりました。

 やはり、(Qtの)ビルドのための環境が整っていない、というのが根本原因のようです。


 お世話になったサイト

 有用なソフトウェアおよび貴重な情報をご提供頂いている皆様に、お礼申し上げます。(以下、順不同)

 参考サイト(1):YAGARTO - Browse /YAGARTO for Mac OS X/20111119 at SourceForge.net
 参考サイト(2):devkitPro - Browse /devkitARM at SourceForge.net
 参考サイト(3):Qt のダウンロード — Qt - A cross-platform application and UI framework
 参考サイト(4):Qt Embedded Development on Mac OS X? | Qt DevNet forums | Qt Developer Network
 参考サイト(5):Cross compiling QT for ARM on Mac OS X Lion | Qt DevNet forums | Qt Developer Network
 参考サイト(6):組み込み Linux - クロスツールチェーン Codesourcery 対応環境
 参考サイト(7):UnhandledException/ARMx - GitHub


 更新履歴

 2012.05.25 「追補・ARMxについて」を追加
 2012.05.22 新規作成


[Home]  [MacSoft]  [Donation]  [History]