問題タブ [install-name-tool]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
xcode - プラグイン バンドルでの dylib @executable_path パスの問題
私はプラグイン バンドルを開発しています。たとえば、MyPlugIn.bundle
アプリケーション用ですBigApp.app
。このバンドルには dylib が必要MyPlugIn.bundle/Contents/Resources/library.dylib
です。単純なアプリケーション バンドルの場合と同様に、library.dylib のパスを再配置しました。
しかし、BigApp.app はこのバンドルの読み込みに失敗し、Mac OS X の Console.app は次のログを記録します。
@executable_pathは MyPlugIn.bundle 実行可能パスではなく BigApp.app 実行可能パスに置き換えられているようです。
絶対パスなしで、Mac OS X 10.4 (Tiger)で動作するようにするための回避策はありますか? ありがとう。
c++ - 動的ライブラリに依存するアプリケーションをデプロイするには?
GStreamer ライブラリを使用するアプリケーションを開発しています。展開を容易にするために、すべての GStreamer ライブラリをローカル バンドルにまとめたいと考えています。このために、次のことを行う小さなスクリプトを作成しました。
- 依存関係を再帰的にトラバースする ( を使用
otool -L
) - すべての依存関係をローカル ディレクトリにコピーする
- すべての依存パスを @executable_path に相対的に作成します (を使用
install_name_tool
)
(興味がある場合は、Ruby スクリプトを参照してください。)
gst_init
ただし、呼び出し時にランタイム エラーが表示されるようになりました。
これらのエラーは、ローカライズされたライブラリを使用した場合にのみ発生します。
install_name_tool の使用に関して、特定の「よくある落とし穴」はありますか? 誰かが私が間違っている可能性があることを知っていますか? 特定の詳細を知る必要がある場合は、お気軽にお問い合わせください。
更新
いくつか変更しました:
- 依存ライブラリについては、id ではなく dylib パスのみを変更するようになりました (のみを使用
install_name_tool -change
し、 を変更しませんinstall_name_tool -id
)。 - メイン ライブラリの場合、実行可能パス (
@executable_name/components/Video.dylib
) に相対的な id 値を設定します。
これら2つの変更により、機能します。しかし、なぜそれが機能するのかは私にはまだ明らかではありません。「id」プロパティの意味を理解するのに苦労しています。パス名形式の識別子のようです。依存ライブラリ用に変更すると実行時エラーが発生するのはなぜですか? さらなる実験で、これらの質問に対する答えを見つけようとします...
linux - 共有ライブラリに依存するプログラムをビルドした後で、共有ライブラリのファイル名を変更するにはどうすればよいですか?
ディレクトリ構造の奥深くにある共有ライブラリに依存するプログラムがあります。その共有ライブラリをより良い場所に移動したいと思います。OS X では、これは install_name_tool で実行できます。Linux に相当するものが見つかりません。
参考までにreadelf -d myprogram
、次の言い換え出力を吐き出します。
(そしてリクエストにより、ldd myprogram
:)
「this/is/terrible/library.so」を「shared/library.so」に訂正したいと思います。プログラムが、相対パス this/is/terrible/library.so が実際に存在する「構築された」場所に残っている場合、予想どおり、ldd はそれを見つけることができることに注意してください。
RPATH については知っていますが、探しているものではありません。検索パスをグローバルに変更する必要はありません。
macos - install_name_tool を使用すると何がうまくいかないのですか?
ビルド後に dylib のインストール パスを変更しようとしています。otool -L
現在のパスが何であるかを確認するために使用します。そして、私は:
エラーにはなりませんが、何も変わりません。パスをもう一度確認すると、古いパスがまだ残っています。また、新しいパスは古いパスよりもはるかに短いため、問題はありません.libは、より多くのファイルパススペースのために追加のフラグでコンパイルされていると思います.
何か案は?
linker - dylibから依存共有ライブラリを削除しますか?
install_name_toolの-changeオプションを使用して、dylibに格納されている依存共有ライブラリの名前を変更できることは知っていますが、依存共有ライブラリを削除する方法はあります。これは、LC_LOAD_DYLIBコマンドであると考えています。 dylibでotool-Lを実行すると表示されますか?
macos - install_name_tool は何もしません
OSX に展開するアプリケーションを準備しています。唯一の問題は、共有ライブラリの再配置です。
それらをすべて .app-folder 自体の Frameworks-folder 内に配置しました。
私がすべてのライブラリで試しているのは次のようなものです:
実行可能ファイルで otool -L を再度実行すると、何も変更されません。これはまだ出力です。
私は何を間違っていますか?
macos - ビルド時に .dylib のインストール名を変更するにはどうすればよいですか
Mac OS X (10.7.1) で C++ 用のgoogle-gflagsコマンドライン フラグ ライブラリを構築しています。ビルドプロセスは次のとおりです。
ビルド時に生成された共有ライブラリのインストール名を変更し、install_name_tool
その後は使用しないようにしたいと考えています。
デフォルトでは、生成された共有ライブラリのインストール名libgflags.dylib
は出力パスです。
のマニュアル ページにld(1)
は、-install_name
リンク時に動的ライブラリのインストール名を変更するために使用できるオプションがあります。
たとえば、ダミー プログラムを使用すると、次のようになります。
しかし、./configure
スクリプトでこのコマンド ライン オプションを使用できません。変数を手動で設定しようとしましCFLAGS
たが、エラーが発生します。
configure
では、.dylib を使用して、またはmake
使用せずに生成された .dylib のインストール名を変更することは可能install_name_tool
ですか?
macos - Mac Os XのMach-Oライブラリにinstall_name_toolとotoolが必要なのはなぜですか?
Xcode 4の最新バージョンを使用してCocoaアプリケーションを開発していますが、ダイナミックライブラリをプロジェクトにリンクしたいと思います(dylibs
)。
プロジェクトにライブラリを追加するだけでは十分ではないことをどこかで読みました。実行install_name_tool
しotool
て、プロジェクトにバンドルされているライブラリをプロジェクトで使用する必要があるためです。
のマニュアルページを読みましたがinstall_name_tool
、なぜこれを行う必要があるのかわかりません。
ライブラリはどのように機能しますか?/usr/local/lib/mylibrary.dylib
実行中のように、アプリケーションとライブラリが私のマシンの特定の場所を指すパスを持っている部分に特に興味がありますotool -L
python - Mac OSX Lion (Xcode を使用) で virtualenv を実行すると install_name_tool エラーが発生する
Python 2.6 で mkvirtualenv を実行しようとすると、次のエラーが表示されます。
install_name_tool を呼び出せませんでした -- Apple の開発ツールがインストールされている必要があります
Xcodeをインストールしました。(ダウンロードしてインストールを待っているだけでなく、実際にインストールされています)。
コマンド which install_name_tool では何も得られません。なぜ私はそれを呼び出すことができないのですか?
macos - Xcode 4、dylib&install_name_tool
OSXプロジェクトでdylibを動作させようとしています。
私はいくつかのサンプルを読んでいます、これは具体的には: Xcode4がdylibを追加しています
しかし、私はまだそれを機能させることができません。
これが私が実行したステップです:
- tests.1.dylibをXcodeプロジェクトフォルダーにコピーしました。
- 走った
sudo install_name_tool -id @executable_path/../Frameworks/testing.1.dylib testing.1.dylib
ラン:
otool -L testing.1.dylib
そして以下を受け取りました:tests.1.dylib :
@ executeable_path /../ Frameworks / tests.1.dylib(互換性バージョン2.0.0、現在のバージョン2.0.0)
/usr/lib/libSystem.B.dylib(互換性バージョン1.0.0、現在バージョン159.1.0)プロジェクトにフレームワークとしてを追加しました
testing.1.dylib
。(ライブラリオプション付きのリンクバンドルを使用)。- この時点で、testing1.dylibをコンパイルすると、期待どおりに.App / Frameworkにコピーされないため、手動でフレームワークパスを作成し、testing.1.dylibをそれにコピーします。a)mkdir -p tests.app /Contents/Frameworksb)cptesting.1.dylibtesting.app/Contents/Frameworks
- Xcodeで
Runtime Search Paths
、ターゲットとプロジェクトの両方のを@ executeable_path/../Frameworksに更新します。
次に、testing.appを別の新しくインストールしたマシンにコピーして、実行しようとします。次のエラーが発生します。
dyld:ライブラリがロードされていません:/user/local/lib/testing1.dylib参照元:/Users/me/testing.app/MacOS/./testing理由:画像が見つかりません
私は何が欠けていますか?
注:install_name_toolを実行する場合、sudoを使用する必要があります。そうしないと、次のエラーが発生します。
install_name_tool:入力ファイルを開くことができません:testing.1.dylib for write(許可が拒否されました)install_name_tool:オフセットを探すことができません:0 in file:testing.1.dylib for write(不正なファイル記述子)install_name_tool:できませんファイルに新しいヘッダーを書き込む:testing.1.dylib(不正なファイル記述子)install_name_tool:入力ファイルに書き込まれたものを閉じることができません:testing.1.dylib(不正なファイル記述子)