NativeBoostでのライブラリの配置

ここ2、3日、NativeBoostで遊んでみた。
以前にSmalltalk勉強会でもらった資料をもとに、LeapMotionを利用できるようにした。結果的には単純なことだったのだが、最初はうまく外部の動的ライブラリを読み込んでくれなくて苦労した。
特にライブラリをどこに置くかがMacやLinuxで異なるようなので、備忘のために記録しておく。

Mac/Linux共通のこと

  • ビルドするにはコンパイルオプションとして”-m32 -shared”を付ける。
  • ファイルの拡張子は.dylibとする。Linuxで.soを付ける必要はない。
  • C++を用いる場合には、NativeBoostから呼ばれる関数は、extern “C” {} でリンケージ指定すること。
  • ライブラリの使用に失敗した場合にはPharoを起動しなおすとよい。
  • Pharo実行中に動的ライブラリを変更してもPharoは終了しないが、当然変更は反映されないのでPharoの再起動が必要。

Macの場合

  • 作成したライブラリはVM内のContents/MacOS/Pluginsに置く。
  • 作成したライブラリから呼ばれる別の動的ライブラリも、同じ場所に置く。

Linuxの場合

  • 作成したライブラリはどこに置いても良いが、LD_LIBRARY_PATH環境変数に格納したフォルダを加えること。
  • Pharo実行中に動的ライブラリを変更すると、Pharoが強制終了するので注意する。

まとめてみたら大したことないが、ライブラリを読み込めない場合の原因追及が難しく、手探り状態だったので後から始める人の参考になればと思う。

(20140808追記)

記事を書いてから以下のサイトが比較的よくまとまっていることに気づいた。
NativeBoost Recipes: The X11 Journey