問題タブ [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 に答える
972 参照

c++ - 動的ライブラリが絶対パスとしてリンカーに渡され、相対パスによってロードされますか?

私が取り組んでいるプロジェクトをビルドして実行しようとしています。私は先に進んで構築し、すべてが素晴らしく、いかなる種類のエラーもありません. 次に、実行可能ファイルを実行しようとすると、動的ライブラリの依存関係の一部が見つからないというエラー メッセージが表示されます。

面白い。何をotool -l報告しますか?

何を与える?CMake によって出力されるように、私のビルド呼び出しは (いくつかのクリーンアップの後) です。

コンパイル (読みやすくするための改行)

リンク:

私が知る限り、 と の両方libprotobuf.dyliblibgpr.dylibリンク段階で絶対パスとして渡されています。libprotobuf.dylibではなく、絶対パスでロードされるのはなぜですかlibgpr.dylib?

価値があるのは、設定DYLD_LIBRARY_PATHすることで機能しますが、設定したりエクスポートしたりする必要はありません。すべての依存関係を構築し、それらを特定のディレクトリに配置するようにレポを設定しました。これは、単に複製して構築する必要があります。

私のコンパイラのバージョンは次のとおりです。

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

c++ - 外部プロジェクトの RPATH を設定しますか?

簡単に開発できるように、リポジトリがすべての依存関係を git サブモジュールとしてインポートするプロジェクトをセットアップしようとしています。私の同僚は、レポ、、およびを複製するだけでgit submodule update --init --recursivecmake .完全makeに機能する開発環境を整えることができます。CMakeLists.txtディレクトリ構造は、 を使用してすべてのサブモジュールをビルドするトップレベルのスーパービルドとしてセットアップさExternalProject_Addれ、次の構造になります。

は次のCMakeLists.txtようになります。

ビルドプロセスはうまく機能します。私makeは最上位で、依存関係が にインストールされusr、 にインストールcdされmy_project、作業を行い、ビルドされたすべての共有ライブラリが検出され、リンクされました。満足しています。

ただし、OS X でビルドされた実行可能ファイルを実行しようとすると、ディレクトリmy_projectに配置された動的ライブラリが見つからないことがわかります。usr/libCMake は、プロジェクト ディレクトリ内にビルドされRPATHたfor ライブラリのみを設定しているようです。この場合は.my_project

カスタム インストールの場所をRPATHビルド時のライブラリと実行可能ファイルに追加する方法はありますか?

いくつかのメモ:

  • この問題は OS X にのみ影響するようです。Linux ではこれらの問題はまったく発生しません。
  • DYLD_LIBRARY_PATHカスタム インストールの場所を含めるように設定すると機能します。ただし、これによりセットアップに追加の手順が追加され、インストールの問題をデバッグしようとすると煩わしくなります。
  • を設定するDYLD_FALLBACK_LIBRARY_PATHこともできますが、追加のセットも追加されるため、これも良いオプションではありません。自作ユーザーはこのオプションを好まないでしょう。
0 投票する
1 に答える
1704 参照

linux - RPATH で $ORIGIN を指定するために推奨される GNU リンカ オプションは何ですか?

私のプラットフォームは、GNU ビルド ツールチェーン (GCC など) を使用するバニラ (非組み込み) x86-64 Linux であると仮定します。

で指定する$ORIGINにはRPATH、リンカー オプションについて知っています-Wl,-rpath,'\$\$ORIGIN'

今日、別のオプションを発見しました: -Wl,-z,origin.

を使用するときは常に含める必要がありますか?-Wl,-z,origin-Wl,-rpath,'\$\$ORIGIN'

公式の GNU ld docs、言う:

オブジェクトに $ORIGIN が含まれている可能性があることを示します。

関連するが異なる: https://stackoverflow.com/questions/33853271/what-are-the-recommended-gnu-linker-options-to-specify-rpath

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

c++ - MAC の動的ライブラリ ディレクトリとの不一致

プロジェクトに動的ライブラリを含めようとしており、次の CMake スクリプトを使用してコンパイルを設定しています。

変数 ${dlib_LIBRARIES} のディレクトリを出力すると、次のようになります。

これは正しく、コンパイルされます。実行可能ファイルの実行時に問題が発生し、次のランタイム エラーが発生します。

otool -L 実行可能ファイルを実行すると、絶対パスではなく相対パスが取得されるため、これは論理的に思えます。

otool で表示されるパスが target_link_libraries で追加されたパスと同じでないのはなぜですか? cmake でこの問題を解決するにはどうすればよいですか?

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

python - OSX 上の Anaconda 用 QScintilla2 のインストール: @rpath の問題

多くの血と汗と涙を流して、Anaconda Python Distribution (2.5.0; Python 2.7.11; PyQt4) で使用するために QScintilla2 ( https://www.riverbankcomputing.com/software/qscintilla/download ) をコンパイルすることができました。 ) Mac OS X El Capitan で。

エラーや警告なしで Qt4Qt5 および Python フォルダー内のすべてをコンパイルおよびインストールした後、すべてが Anaconda の正しい場所に配置されたように見えます。

ただし、 qscintilla2 をインポートしようとすると

次のエラーが表示されます。

したがって、モジュールは libQtGui.4.dylib を見つけることができないようです

私は優れたブログhttps://mikeash.com/pyblog/friday-qa-2009-11-06-linking-and-install-names.htmlで@rpath変数を読んで、私が知っていることになりましたこの問題を解決するためにotoolandを使用する必要があります。install_name_tool

実行するotool -Lと、次の出力が得られます。

そしてotool -lは私に与えます

私が見る限り、このモジュールには @rpath のエントリはありません (または、少なくとも LC_RPATH コマンドを見つけるべきでしたか?)。もちろん、後で install_name_tool を使用してこれを設定できますが、ここで行き詰まります。

この状況で Qsci.so モジュールの @loader_path および @executable_path と見なされるものを理解できません。それはに位置しています

しかし、それはへの直接参照のようです

この場合、 /Users/daniel/anaconda/lib/python2.7/site-packages/PyQt4/ または /Users/daniel/anaconda/lib/ は @loader_path になりますか? @executable_path は、/Users/daniel/anaconda/bin にある Python インタープリターのパスを指しているだけだと思いますが、間違っている場合は修正してください。

libQtGui.4.dylib と libQtCore.4.dylib はどちらも次の場所にあります。

正しい@rpathsと思われるものを手動で追加しようとしました

Qsci.so の格納フォルダーが @loader_path であると仮定した最初のエントリと libqscintilla2.11.dylib の 2 番目のエントリですが、役に立ちません...

@rpath に絶対パスを追加すると

それは問題を解決するので、これがrpathの問題であることはわかっています。ただし、これを正しく取得したらアプリをパッケージ化する予定であるため、相対的な場所が必要です。

ご協力いただきありがとうございます。この投稿が意図したよりも長くなってしまったことをお詫びします。

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

c++ - CMake から生成された Make Install で RPath が機能しない

動的ライブラリを実行可能ファイルにリンクしようとしている小さなサンプル プロジェクトを取得しました。

ファイル構造は次のとおりです。

-事業

--dlibs

----engine.h

----engine.cpp

----CMakeLists.txt

- EXE

----main.h

----main.cpp

----CMakeLists.txt

これは私がそれを実行するために行うことです:

私が得るエラー:

ただし、ビルド フォルダー内に生成されたファイルは機能します。私の知る限り、「make install」を使用している場合は相対 RPath を設定する必要があり、これを試しました。

CMakteLists.txt (exe フォルダー) 内にありますが、結果は同じです。

RPath を設定する他のいくつかの方法を試しましたが、役に立ちませんでした。

どんな助けでも大歓迎です。

よろしくお願いします