問題タブ [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.

0 投票する
1 に答える
1926 参照

linux - コンパイルで -rpath を使用して、実行可能ファイルが同じディレクトリ内の共有ライブラリを検索するように設定する方法

実行可能ファイルを設定する方法 コンパイル時に同じディレクトリにある共有ライブラリを検索します, 実行可能ファイルと関連する .so ライブラリを同じディレクトリに置きました, chanugubg LD_LIBRARY_PATH や /etc/ld.so.conf の代わりに, 設定することは可能ですか? -rpath は実行可能ファイルを保持するディレクトリであり、変数は特定のパスではなく、変更可能です。

0 投票する
1 に答える
866 参照

rpath - OS X での /bin/executable の修正

「brew update」が私の /bin/zipalign を破壊したと思います - その後はもう実行されません。ボックスは離れた場所にあります(10時間のタイムゾーンの違い、サーバーボックス内にあるため、cmd + rを押すための物理的なアクセスを取得できません)。sudo はできますが、問題は解決しません。

これを解決するにはどうすればよいですか?

これは Jenkins スレーブです。アクセス: ssh のみ、sudo はできますが、実際のキーボードに触れることはできません。どうすれば修正できますか?

0 投票する
1 に答える
6531 参照

cmake - MacOS で CMake を使用して複数の RPATH ディレクトリを設定する方法

MacOS の CMake でターゲットに複数の RPATH ディレクトリを設定するにはどうすればよいですか? Linux では、コロンで区切られたリストを使用できます。

MacOS では、コロンで区切られたリストを技術的に追加してotool -l表示することができますが、これらのディレクトリは検索されません。

通常、MacOS で複数の RPATH ディレクトリを持つ場合、複数のリンカー フラグを送信すると、これらのフラグはotool -l. 何かのようなもの:

これにより、次のことが得られます。

この動作を CMake で再現するにはどうすればよいですか?

0 投票する
1 に答える
8139 参照

macos - OS X で RPATH を変更する方法

xbox kinect を使用するために、openkinect の Web サイトから簡単なインストールを行っています。問題は、OSX ディストリビューションがなく、homebrew がインストールを処理すると想定されていることです。

インストールの最後のステップで、インストールの何が問題なのかについて役立つ手がかりを見つけました。

サイトから言われました。「リンクに問題がある場合は、各 libfreenect ライブラリの rpath を [次のコマンドを使用して] 変更する必要があります。」

私の rpath は間違いなく正しく設定されていません。そして、CMake でビルドするときのこの二次的なメッセージは、間違いなく私の疑問を裏付けています。

私が抱えている唯一の問題は、上記のコマンドが機能しないことです。その理由の 1 つは、私のMac がすべてのファイルを以下に配置し/usr/local/lib/、NOT の下に/opt/local/lib/置いていることです。usr一部のファイルを からにコピーしたoptところ、リンク エラーの数は減りましたが、まだいくつか残っています。繰り返しますが、それらはすべてライブラリがロードされていないことに関係しているためopt、この問題の解決が容易になります。

上記のコードの最初のブロックを適切に実行する方法についてのヘルプは役に立ちます!

サブノート (同様の問題):

0 投票する
1 に答える
561 参照

macos - Mac osxでのdylibからdylibへのパス、Macでrpathを機能させる方法は?

複数の dylib に対して動的にリンクするプロジェクトがあります。ビルドを別のMacにコピーするとき。「インストール」中に共有ライブラリのパスを修正するために、dylib と実行可能ファイルに対して「otool」を実行する必要があります。

OSX には、DLL から DLL へのパスに対していくつかの奇妙な要件があり、相対パスが機能しない (つまり、rpath を使用する) ように見えます。ここで私の質問:

  1. Mac でソフトウェアを出荷する通常の方法は何ですか? つまり、.pkg または .dmg インストーラーを実行している場合、インストールされている dylib が相対パスで相互にリンクできることを確認するにはどうすればよいですか? dylib パスは、rpath またはいくつかのポスト インストール スクリプトで修正する必要があります。

  2. インストール後のスクリプトを実行してこれを修正することが許可されていない場合、他のオプションは何ですか?

0 投票する
0 に答える
75 参照

linux - 実行時リンカー、親実行可能ファイルへのパスを解決パスに追加

次のソースがあります(可能な限り単純化されています):

foo.c --> メインの実行可能ファイル ${MAIN_FOLDER}/foo は、実行時に提供されたパスから bar.so を削除します。

bar.c --> 共有ライブラリ /bar.so、foo への相対パスから baz.so を削除

baz.c --> ${MAIN_FOLDER}/lib/baz.so、いくつかの実装。

私が達成する必要があるのは、foo からロードされたときに bar.so を参照するようにすることです。dlopen を呼び出す前に foo で発行できる C コード、または bar.so リンク ステップに提供するリンカー フラグを探しています。

bar.so の rpath を設定しようとしましたが、$ORIGIN が foo ではなく bar.so の場所であるため、機能しませんでした。foo に RPATH を設定する (これは機能します。適切な ORIGIN を持つ RPATH が bar.so のロード プロセスに渡されます) は残念ながらオプションではありません (変更できない正式な制限のため、これを行うことはできません)。コードを変更できます。ただし、foo.cの。また、$CWD からの相対パスを使用しても問題は解決しません (プログラムが呼び出される場所がわかりません)。

bar.so をロードする前に foo に env LD_LIBRARY_PATH を設定しようとしても失敗しました。

今回は移植性には興味がありません。今のところ Linux のソリューションだけが必要です。

0 投票する
1 に答える
347 参照

linux - ライブラリ/実行可能 RPATH を別の値にパッチするにはどうすればよいですか?

-rpathリンカーオプションを使用して、実行可能ファイルまたはライブラリの「検索パス」を設定できることを知っています。これは、依存関係が、オブジェクト ローダーによって通常は考慮されない非標準の場所にインストールされ、通常はLD_LIBRARY_PATH環境変数の設定よりも優れていると見なされる場合に役立ちます。

ただし、私の特定のケースでは、統合テスト マシンと運用マシンの間でパスが異なります (残念ながら、それがどれほど意味をなさないかについては議論の余地がありません)

統合テストと本番プラットフォームの両方に同じパッケージを使用することを強く希望します。私の考えは、適切なターゲット ディレクトリを選択するインストール スクリプトを提供し、ライブラリ/実行可能ファイルの RPATH を正しい値にパッチすることです。

その時点で、私は自分が知らないことに気づきました...

ライブラリ/実行可能 RPATH を別の値にパッチするにはどうすればよいですか?

そのために利用できるコマンドラインツールがあると思いますが、私は知りません。

重要な場合に備えて、CMake セットアップを使用して .tgz パッケージをビルドおよび作成しています ( cpack -G TGZ)。残念ながら、「リアル」パッケージ (RPG、DEB) はオプションではありません。

0 投票する
0 に答える
1274 参照

macos - CMake、OSX、@rpath、およびフレームワークへのリンク

Linuxで作業していたものをOSXで動作させるために1週間を費やしましたが、役に立ちませんでした。rpathに関するCMakeの記事とそれに関する他のさまざまなSOの投稿を読んで、CMakeLists.txtをいじって動作させようとしましたが、失敗しました。誰かがここでヒントを教えてくれることを願っています私が間違っていること。

結果の実行可能ファイルをotoolで確認すると、次のようになります。

これは正しいですが、ライブラリ パスは次のとおりです。

そしてもちろん、アプリケーションを実行すると、次のようになります。

各ライブラリの代わりに @executable_path を @rpath に変更するビルド後のコマンドを試してみましたが、ライブラリが見つかりましたが、実行可能ファイルでフレームワーク ( にあります${MAYA_LOCATION}/Maya.app/Contents/Frameworks) を見つけることができず、リンクに関するその他の問題が発生しました。同じフォルダ内の他の動的ライブラリ(Maya の QtCore など)

もちろん、Frameworks/フォルダーを実行可能ファイルの親ディレクトリにコピーし、すべてのファイルを実行可能ファイルと${MAYA_LIBRARY_DIR}同じフォルダーにコピーするか、実行可能ファイルを起動する前にライブラリとフレームワークのディレクトリを指すようにDYLD_LIBARY_PATHandを設定すると、これはすべて機能します。DYLD_FRAMEWORK_PATHしかし、Linux のように環境を変更することなく、OSX 上のこれらのライブラリとフレームワークを動的にリンクしたいと考えています。

ここで何が間違っていますか?

0 投票する
1 に答える
1320 参照

linux - rpath が設定されているにもかかわらず、1 つの dll が見つからない

ldd は、rpath 定義に存在する dll を見つけることができません。いくつかの他のライブラリが見つかりました (チェック /./../lib/*)

ここに ldd の出力があります (2 つの dll が ../lib にあることがわかりますが、libexpat.so.0 にはありません:

root@hyperstream:/DT/local/ADE-trunk4/build-ADE-Desktop-Default/bin# ldd ./ade_admin linux-vdso.so.1 => (0x00007ffeb9796000) libadeversion.so => /DT/local/ADE -trunk4/build-ADE-Desktop-Default/bin/./../lib/libadeversion.so (0x00007f31abaef000) libuuid.so.1 => /lib/x86_64-linux-gnu/libuuid.so.1 (0x00007f31ab8ca000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f31ab6ac000) libaprutil-1.so.0 => /DT/local/ADE-trunk4/build-ADE-Desktop-Default/ bin/ ./../lib/libaprutil-1.so.0 (0x00007f31ab58c000) libapr-1.so.0 => /DT/local/ADE-trunk4/build-ADE-Desktop-Default/bin/ ./. ./lib/libapr-1.so.0 (0x00007f31ab460000) libavahi-client.so.3 => /usr/lib/x86_64-linux-gnu/libavahi-client.so.3 (0x00007f31ab24d000) libavahi-common.so.3 => /usr/lib/x86_64-linux -gnu/libavahi-common.so.3 (0x00007f31ab041000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f31aae3d000) libstdc++.so.6 => /usr/lib/x86_64 -linux-gnu/libstdc++.so.6 (0x00007f31aaab5000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f31aa7ac000) libgcc_s.so.1 => /lib/x86_64-linux -gnu/libgcc_s.so.1 (0x00007f31aa595000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f31aa1cc000) /lib64/ld-linux-x86-64.so.2 ( 0x0000560d30a76000) libexpat.so.0 => librt.so.1 が見つかりません => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f31a9fc4000) [...]

root@hyperstream:/DT/local/ADE-trunk4/build-ADE-Desktop-Default/bin# ファイル ../lib/libexpat.so.0 ../lib/libexpat.so.0: ELF 64 ビット LSB共有オブジェクト、x86-64、バージョン 1 (SYSV)、動的にリンク、BuildID[sha1]=762de704943d03033d01a9725216d6b05d0740f5、削除されていません

ここでrpath:

root@hyperstream:/DT/local/ADE-trunk4/build-ADE-Desktop-Default/bin# readelf -d ade_admin | grep 'R.*PATH' 16: 0x000000000000001d (RUNPATH) ライブラリの実行パス: [${ORIGIN}/../lib]

致命的な事実:clang 3.8で動作しますが、gcc 6.3(ubuntu 16.10)では失敗します

明らかに LD_LIBRARY_PATH=../lib を追加すると再び機能しますが、rpath の目的はそれを設定しないようにすることでした

root@hyperstream:/DT/local/ADE-trunk4/build-ADE-Desktop-Default/bin# export LD_LIBRARY_PATH=../lib root@hyperstream:/DT/local/ADE-trunk4/build-ADE-Desktop-Default/bin# ldd ./ade_admin linux-vdso.so.1 => (0x00007ffea23b6000) libadeversion.so => ../lib/libadeversion .so (0x00007f78c6474000) libuuid.so.1 => /lib/x86_64-linux-gnu/libuuid.so.1 (0x00007f78c624f000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f78c6031000) libaprutil-1.so.0 => ../lib/libaprutil-1.so.0 (0x00007f78c5f11000) libapr-1.so.0 => ../lib/libapr-1.so.0 (0x00007f78c5de5000) ) libavahi-client.so.3 => /usr/lib/x86_64-linux-gnu/libavahi-client.so.3 (0x00007f78c5bd2000) libavahi-common.so.3 => /usr/lib/x86_64-linux-gnu /libavahi-common.so.3 (0x00007f78c59c6000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f78c57c2000) libstdc++.so.6 => /usr/lib/x86_64-linux -gnu/libstdc++.so。6 (0x00007f78c543a000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f78c5131000) libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 ( 0x00007f78c4f1a000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f78c4b51000) /lib64/ld-linux-x86-64.so.2 (0x0000559fdceab000) libexpat.so.0 => ../lib/libexpat.so.0 (0x00007f78c492a000)

何か案が ?

よろしく

ローラン

0 投票する
0 に答える
147 参照

macos - Mac で electron アプリケーションを実行中に @rpath を定義する方法

@rpath以下のように、端末から実行している電子アプリケーション を定義するにはどうすればよいですか。

@rpathこのプロジェクトは、ライブラリの場所を定義するために使用する VLC プレーヤーの特定のライブラリに依存しています。これが私にとって疑問が生じた方法です。