5

dylibs へのリンクを含むコマンドライン実行可能ファイルがありますが、これは、配布されると、 によって返される指定された場所にはありませんotool -L

たとえば、次のバイナリがあるとしfooます。

$ otool -L foo
  /opt/local/lib/libgcc/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.18.0)
  ...

私のインストーラーには、install_name_tool -changeこれを修正するために使用しようとするインストール後のスクリプトがfooあり、新しい場所の dylib にリンクします。

例えば:

$ sudo install_name_tool -change /opt/local/lib/libgcc/libstdc++.6.dylib /somewhere/else/more/sensible/libstdc++.6.dylib foo

しかし、この変更は無視され、黙って失敗します。otool -Lもう一度実行すると:

$ otool -L foo
  /opt/local/lib/libgcc/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.18.0)
  ...

何も変わっていません。

ファット バイナリをコンパイルして、-headerpad_max_install_namesコンパイル フラグを 32 ビットの Makefile に追加しようとしました。これは問題を解決しませんでしたinstall_name_tool -change。まだサイレントに失敗します。

64 ビット プラットフォームでは何もしないことを読み-headerpad_max_install_namesましたが、とにかく 64 ビットの Makefile に追加しました。予想通り、これでも問題は解決しませんでした。

リンクされたdylibのパスを最終的に変更できるように、コンパイル手順を修正するにはどうすればよいinstall_name_toolですか?

4

0 に答える 0