問題タブ [rpath]
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.
gcc - RPATH はコンパイル時に存在する必要があります
ここで明らかな何かが欠けている場合は、ご容赦ください。私は別のプラットフォーム用にいくつかのアプリケーションを開発しており、独自のライブラリはすべて /app/lib にインストールされています。これを容易にするために、各バイナリのランタイム ライブラリ パスを "/app/lib" として指定します。これは正常に機能します。ただし、リンク時にパス「/app/lib」がビルド環境に存在する必要があります (そのディレクトリが空であっても)。問題を複雑にしている可能性がある NetBeans を使用していますが、"-Wl, -rpath /app/lib" が gcc に渡されていることがわかります。
ビルド環境で空の "/app/lib" を作成する必要は避けたいのですが、ターゲット プラットフォームでファイル構造を変更したくありません。ビルド環境から /app/lib を削除すると、ビルド時に見つからないというエラーが発生します。リンク時に存在する必要なく、ランタイム検索パスを指定する方法はありますか?
linux - Linux rpath で実行可能な場所をエンコードする方法は?
いくつかの .so ライブラリを暗黙的にロードする実行可能ファイルがあり、それらはすべて私がビルドしました。展開、または少なくともテスト/デバッグのために、それらをすべて同じディレクトリに配置したいと思います。
実行可能ファイルがライブラリを暗黙的にロードするようにするには、実行可能ファイルのディレクトリに rpath (DT_RUNPATH) を設定したいと思います。OS X では、次のようにします。
@loader_path/.
OS Xで実行可能ファイルのrpathを形成することに注意してください.Linuxでは、これに最も近いのは
ここでの問題は、Linux では rpath が実行可能ファイルのディレクトリではなく、現在の作業ディレクトリに従うことです。Linuxで同じことを達成する方法はありますか?
linker - automake とカスタム rpath
アプリケーションと一緒にサードパーティのライブラリを出荷する必要があります。LD_LIBRARY_PATH
私は手動で設定したり、ラッパースクリプトを必要としたりしたくないので、 automake に custom を設定させたいのですrpath
。残念ながらlibtool
、独自の-rpath
オプションがあり、追加-Wl,-rpath,/foo/bar
するLDFLAGS
だけで結果が得られます
libtool
コマンドラインオプションと混同されているようです。代替フォームでも同じことが起こり-Wl,-rpath -Wl,/foo/bar
ます。
libtool の干渉なしにカスタム rpath を指定する方法はありますか?
macos - フレームワークに埋め込まれたダイナミックライブラリの@rpath
私はアプリを持っています、それを呼び出しますAnimal.app
。そのContents/Frameworks
フォルダの中にはフレームワークがありますMammal.framework
。そしてVersions/A/Frameworks
、フレームワークのフォルダ内に、がありますdog.dylib
。のインストール名dog.dylib
は@rpath/dog.dylibです。"Runpath Search Paths"
フレームワークの設定については、を指定し@loader_path/../Frameworks
ました。(その最後の設定の私の理由は、dylibの「ローダー」がパスにあるフレームワークのバイナリになるということMammal.framework/Versions/A/Mammal
です。)
実行時にエラーメッセージが表示されます。
Appleの「Run-PathDependentLibraries」ドキュメントとMikeAshのブログ投稿を読んだの@rpath
ですが、それでも自分が何を間違っているのかわかりません。
c - OSXで現在のプロセスのRPATHを取得する
基本的に、私はこの質問に対する答えを探しています。Linuxで現在のrpathを検査する方法はありますか?、ただしOSX用。OSXの現在のプロセスのRPATHエントリをプログラムで取得したいと思います。シェルを使用してこれを行う方法は知っていますが、プロセスを内部的に検査する方法を探しています。
ありがとうございました!
path - 名前にパスがある共有ライブラリ
独自の共有ライブラリを多数使用するプロジェクトを作成しています。私の意図は、ディレクトリ内にライブラリ名を作成することです. /bar (/usr/lib/libfoo/bar.so または /opt/lib/libfoo/bar.so などを見つけるため)。
私はテストするために本当に小さなコードを作りました:
そしてそれをコンパイルしました: gcc -fPIC -shared -Wl,-rpath,libfoo/ lib.c -o /usr/lib/libfoo/bar.so
.
次に、テスト プログラムで を使用しgcc -lfoo/bar test.c
、コンパイルします (mylib()
ライブラリからシンボルが見つかります) が、プログラムを実行しようとすると ( ./a.out
)、ダイナミック リンカはライブラリが見つからないと文句を言います。私の場合、Mac OS X Lion を使用しています。
私は何を間違っていますか?おそらく答えは「すべて」なので、ライブラリパスで libfoo.so の代わりに libfoo/bar.so を探すために、どのように目的の効果を達成する必要がありますか?
前もって感謝します。:)
linux - バイナリの elf RUNPATH に存在するライブラリは使用されていませんか?
gcc-4.7.2
私の環境でカスタムビルドしました。システム gcc はgcc-4.3.4
.
すべてのカスタム gcc のバイナリと共有ライブラリのRUNPATHにパッチを適用しました。patchelf --set-rpath
ただし、ldd
4.7.2で実行すると、 RUNPATHが指すシステムではなくcc1
、システムが選択されます。libstdc++
ご覧のとおり、RUNPATHgcc-4.7.2
はライブラリの場所を指定します。
RUNPATHlibstdc++.so.6
の最初のエントリに存在することはわかっています。
環境にLD_LIBRARY_PATHが設定されていません。
- RUNPATHで見つかったライブラリを取得しないのはなぜですか?
gcc-4.7.2
ライブラリを使用するように強制するにはどうすればよいですか?