wxmac について少し


高見くんが作った某可視化システムはwxWidgetsを使って実装しています.それを岩崎くんが大規模にリファクタリングしてくれたのですが,ビルドに不安定さが残っていて不安があったので調査していました.ようやく原因がつかめたような気がします.何が気になっていたかというと,リンクのときに以下のようなエラーが発生することです.

ld: warning: ignoring file
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks//QuickTime.framework/QuickTime, file was built for i386 which is not the architecture being linked (x86_64):
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks//QuickTime.framework/QuickTime

どうやら,Homebrew が入れる wxWidgets は32ビット版と64ビット版の両方をサポートしていて,前者は QuickTime のフレームワークを必要とするのだけれども,後者は必要ない,というか,そもそも QuickTime フレームワークは 32ビット版しか提供されていないためにエラーとなります.

ということで,普通ならば-framework QuickTimeを省略すればいいのですが,wxWidgets のコンパイルの場合,リンク時のフラグは wx-config というユーティリティに自動生成してもらうために簡単にはいきません.前述の問題は,もう二年も前から知られていることなのですが,ではこの問題は wx-configのバグかというとそうとばかりも言えなくて...という議論が展開されて今に至っています.自分だけの問題であれば,wx-config を勝手に書き換えて -framework QuickTime を除去すればいいかもしれませんが,ひとまず害はエラーメッセージが気になるというだけのようなので無視することとしました.

システムが動いていなかった理由はこれとは別のライブラリのリンク順だったようなので,無関係ではなかったのですが,ちょっと回り道をしてしまいました.