6

使用している特定のツール チェーンでクロス コンパイルするときに rpath-link がどのように機能するかについての理解を確認するのに苦労しています (ただし、これはクロス コンパイル全般に適用される一般的な質問だと思います)。

ライブラリとアプリケーションをビルドするときにコンパイラとリンカーに渡されるフラグを確認すると、次のようにリンカーに渡されます。

-Wl,-rpath-link,/home/Dev/env/sys/crosscompiletoolchain/armle-v7/lib/

これは、私の開発マシンのターゲット デバイス用にビルドされている共有ライブラリに埋め込まれているパスです。デバイスに展開する前に、開発マシンですべての最終的なリンクを行うので、これは理にかなっています。最終的にデバイスにデプロイするとき (つまり、共有ライブラリ + アプリケーション)、それらの共有ライブラリには役に立たない rpath-link がありませんか?

ビルドされたライブラリとアプリケーションは、関係なくターゲットで正常に動作するように見えます。推測する必要がある場合、アプリケーションには、デフォルトのライブラリ検索の 1 つとして /lib/ を持つデバイス OS によって提供される環境があるためだと言えます。パス (rpath-link は、検索するディレクトリの最初のセットのみを指定します)。これは正しいです?

4

1 に答える 1

13

"Using LD, the GNU linker - Options - GNU Project Archives" ( ftp.gnu.org/pub/old-gnu/Manuals/ld-2.9.1/html_node/ld_3.html ) をチェックしてください:

-rpath と -rpath-link の違いは、 -rpath オプションで指定されたディレクトリが実行可能ファイルに含まれ、実行時に使用されるのに対し、 -rpath-link オプションはリンク時にのみ有効であることです。

于 2014-01-10T09:47:14.877 に答える