1

ここで明らかな何かが欠けている場合は、ご容赦ください。私は別のプラットフォーム用にいくつかのアプリケーションを開発しており、独自のライブラリはすべて /app/lib にインストールされています。これを容易にするために、各バイナリのランタイム ライブラリ パスを "/app/lib" として指定します。これは正常に機能します。ただし、リンク時にパス「/app/lib」がビルド環境に存在する必要があります (そのディレクトリが空であっても)。問題を複雑にしている可能性がある NetBeans を使用していますが、"-Wl, -rpath /app/lib" が gcc に渡されていることがわかります。

ビルド環境で空の "/app/lib" を作成する必要は避けたいのですが、ターゲット プラットフォームでファイル構造を変更したくありません。ビルド環境から /app/lib を削除すると、ビルド時に見つからないというエラーが発生します。リンク時に存在する必要なく、ランタイム検索パスを指定する方法はありますか?

4

2 に答える 2

1

あなたが探しているオプションは だと思います-Wl,-rpath-link,/path/to/libraries両方のオプションを同時に使用する必要があります。

リンカーは、-rpath-linkリンク時にライブラリを見つけるために使用しますが-rpath、実行時に使用するために値をバイナリにエンコードします。

于 2012-04-04T18:40:18.693 に答える
1

構文は "-Wl,-rpath -Wl,/app/lib" にする必要があります ("-Wl,-rpath,/app/lib" も機能します)。これは NetBeans のバグです。それがそれほど重要ではない理由 (そして私がこれまで気付かなかった理由) は、リンク時の検索パスが実行時に引き継がれるように見えるためです。NetBeans は -rpath と /app/lib の間にカンマを配置しないため、/app/lib はリンク時の検索パスとして解釈されます。その結果、依存ライブラリは実行時に適切な場所で引き続き検出されますが、これはリンク時の依存関係であるため、/app/lib が存在しないためにリンクが失敗します。

于 2012-05-22T17:43:48.470 に答える