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

Macで共有ライブラリをdynamic loading

Cygwinで共有ライブラリ(*.dll)のDynamic loadingができないのは,なんとなくしかたなさそうに見えるものの,Intel Macでできないのはなんとなく納得がいかないので,ちょっと見てみた.

エラーメッセージdynamic loading not supported on this platformを手掛かりにソースを見てみると,biterun/unix.cあたりでプラットフォームに応じた共有ライブラリのロードを行なっているらしいことがわかる.よく読んでみるとMacOSAPINSLinkModuleなんてのも使われてて,あからさまにMacOSのサポートはされているみたい.きっとppc macのサポートだけして,intel macのサポートを忘れたに違いない(そんなわけない).

configureを見ると,

    powerpc-apple-darwin*)
      mksharedlib="cc -bundle -flat_namespace -undefined suppress -o"
      bytecccompopts="$dl_defs $bytecccompopts"
      #sharedcccompopts="-fnocommon"
      dl_needs_underscore=true
      shared_libraries_supported=true;;

みたいな場所があったので,

    i[3456]86-apple-darwin*)
      mksharedlib="cc -bundle -flat_namespace -undefined suppress -o"
      bytecccompopts="$dl_defs $bytecccompopts"
      #sharedcccompopts="-fnocommon"
      dl_needs_underscore=true
      shared_libraries_supported=true;;

とか付け足して,./configureからやりなおし.とりあえず共有ライブラリもちゃんとロードできるようになった.


./configureを読むかぎりでは,Intel macも考慮に入っているみたいなので,多分Dynamic loadingを有効にするとうまくいかないことがあるんだろう.とりあえず,わからないからそのまま使ってみるけど,こえーなぁ.