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
ですか?