0

ライブラリと Linux ローダーをクロス コンパイルしました。カスタム ld-.so.conf を /etc の下に配置しました。conf ファイルには、クロス コンパイルされたすべてのライブラリとローダーを含むパスがあります。

しかし、ldconfig を実行すると、

ldconfig -C /etc/ld-.so.cache -f /etc/ld-.so.conf

すべてのシステム ライブラリとそのパスは、キャッシュ ファイルに存在します。クロス コンパイルされたライブラリのみを含むように生成されたキャッシュ ファイルが必要です。

ldconfig 操作のトレースは次のとおりです。

strace /opt/me/ldconfig -C /etc/ld-me.so.cache -f /etc/ld-me.so.conf execve("/opt/me/ldconfig", ["/opt/me/ldc "..., "-C", "/etc/ld-me.so.cache", "-f", "/etc/ld-me.so.conf"], [/* 38 変数 */] ) = 0

uname({sys="Linux", ノード="ip-172-31-32-236", ...}) = 0 brk(0)
= 0x10c1000 brk(0x10c2180) = 0x10c2180 arch_prctl(ARCH_SET_FS, 0x10c1860) = 0 brk(0x10e3180)
= 0x10e3180 brk(0x10e4000) = 0x10e4000 open("/usr/lib/locale/locale-archive", O_RDONLY) = 3 fstat(3, {st_mode=S_IFREG|0644, st_size=99154480, ...} ) = 0 mmap(NULL, 99154480, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f46155a4000 close(3)
= 0 open("/etc/ld-me.so.conf", O_RDONLY) = 3 fstat(3, {st_mode =S_IFREG|0640, st_size=25, ...}) = 0 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f46155a3000 read(3, "/opt/me/lib\n ", 4096) = 25 stat("/opt/me/lib", {st_mode=S_IFDIR|0750, st_size=4096, ...}) = 0 読み取り (3,""、4096)
= 0 close(3) = 0 munmap(0x7f46155a3000, 4096) = 0 stat("/lib", {st_mode=S_IFDIR|0555, st_size=4096, ...}) = 0 stat("/lib64", {st_mode =S_IFDIR|0555, st_size=12288, ...}) = 0 stat("/usr/lib", {st_mode=S_IFDIR|0555, st_size=4096, ...}) = 0 stat("/usr/lib64 ", {st_mode=S_IFDIR|0555, st_size=12288, ...}) = 0 open("/opt/me/lib", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = 3

システム ライブラリが追加される理由を誰か教えてもらえますか?

4

1 に答える 1

0

これが ldconfig の定義済みの動作であるためです。

ldconfig は、コマンド ラインで指定されたディレクトリ、ファイル /etc/ld.so.conf、および信頼できるディレクトリ (/lib および /usr/lib)で見つかった最新の共有ライブラリへの必要なリンクとキャッシュを作成します。キャッシュは、実行時リンカー、ld.so または ld-linux.so によって使用されます。ldconfig は、どのバージョンのリンクを更新する必要があるかを判断するときに、検出したライブラリのヘッダーとファイル名をチェックします。

信頼できるディレクトリ リストは、切り貼りした man ページが作成された後、lib64 ディレクトリで更新された可能性があります。

実際のディレクトリを指すシンボリック リンクまたはバインド マウントを使用して、conf ファイルに基づいてディレクトリ構造を作成し、-r directory を使用して、システム ディレクトリの空のバージョンに基づいて ldconfig をビルドすることができます。

于 2013-10-29T14:12:38.670 に答える