Darwin に移植する Linux 用の Makefile があります。makefile は一連の .o ファイルを取り、それらを .so 共有オブジェクトにリンクします。わかりましたので、ダーウィンでこれに最適なアナログは dylib であると考えました (これは間違っていますか?)。そこで、-shared フラグを -dynamiclib に変更しました。
現在、dylib にリンクしているコードは、多くの外部ライブラリに依存しています。dylib をビルドしようとすると、未定義の参照があるというエラーが表示されます。しかし、Linux Makefile は、.so ファイルを作成するビルド ステップで -lwhatever または -L/path/whatever オプションを指定していません。ん?これは、ELF .so ファイルを作成すると、デフォルトで外部参照が未解決のままになり、共有ライブラリがロードされると再帰的にロードしている共有ライブラリに依存する共有ライブラリをロードしますか? 共有ライブラリが .a または .o ファイルに依存している場合、それらを共有ライブラリに静的にリンクする必要があります。そうしないと、実行時にリンクできません。実行時にロードされるライブラリに未定義の参照があることをどのように回避できますか?参照が動的にロード可能なライブラリへの参照でもある場合を除きます。
とにかくそう指定すれば
-undefined suppress -flat_namespace
共有ライブラリを作成するときに -l オプションと -L オプションを追加する必要はありません。しかし、これが最終的にどのように機能するかはまだわかりません。