私はこれと同じ問題があります質問以前の投稿では/etc/ld.so.preload
正しいアーキテクチャを傍受できませんでした。いくつかの背景知識:ld.so.preload
バイナリが実行されているすべてのファイルで参照される共有オブジェクト(64ビット)をコンパイルしました。問題は、ERROR: ld.so: object '/usr/local/lib/mysharedobject.so' from /etc/ld.so.preload cannot be preloaded (wrong ELF class: ELFCLASS64): ignored.
32ビットプログラムの実行中にエラーが発生したことです。
その質問に対する答えに基づいて問題を解決するために、2つのディレクトリ(およびlib/i386-linux-gnu
、x86_64-linux-gnu
例えばin /var/opt
)を作成し、プログラムアーキテクチャに従って正しいライブラリがプリロードされるように /var/opt/$LIB/mysharedobject.so
inを指定する必要がありました。/etc/ld.so.preload
したがって、この場合、Debianベースのシステムは次/var/opt/$LIB/mysharedobject.so
のように拡張されます。
/var/opt/lib/i386-linux-gnu/mysharedobject.so
32ビットプログラムの場合。/var/opt/x86_64-linux-gnu/mysharedobject.so
64ビットプログラムの場合。
しかし、これを適用した後、私が実行しているすべてのバイナリ(たとえばls
)は次の「エラー」を出力します。
ERROR: ld.so: object '/var/opt/$LIB/mysharedobject.so' from /etc/ld.so.preload cannot be preloaded (cannot open shared object file): ignored.
ご覧のとおり、$LIB は何も拡張されません。また、このライブラリを使用してアップデートシステムを設定し$LD_LIBRARY_PATH
て/var/opt
実行しましたが、成功しませんでした。ldconfig
ここで問題は何ですか?
ベストアンサー1
これシェル拡大する$LIB
しかし、次のような場合は不可能です。
指定する
/var/opt/$LIB/mysharedobject.so
存在する/etc/ld.so.preload
これマニュアルページ言及する/etc/ld.so.preload
グローバル拡張や環境変数の可能性についての言及はありません。
プログラムの前にロードするスペースで区切られたELF共有オブジェクトのリストを含むファイル。ディスカッションを見る
LD_PRELOAD
以上。両方ともLD_PRELOAD
そして/etc/ld.so.preload
使用されると、指定されたライブラリLD_PRELOAD
まず事前にロードしてください。/etc/ld.so.preload
システム全体に影響を与え、システムで実行されているすべてのプログラムに指定されたライブラリが事前にロードされます。 (これは一般的に望ましくなく、通常はライブラリ構成エラーの問題に対する一時的な解決策などの緊急解決策としてのみ使用されます。)
しばらく停止し、データがどのように使用されるかを考えると、その可能性もほとんどありません。
- glob拡張は、データ(曖昧さ)があらゆる種類の興味深いファイルと一致する可能性があるため、セキュリティ上の問題になる可能性があります。
- 環境変数を設定する必要があります。どこかにで、ユーザーごとに簡単に異なる場合があります。
これで、このマニュアルはマニュアルページに記載されています。$LIB
rpathで使用できますが、LD_PRELOAD
次のように言います。
セーフランモードでは、スラッシュを含む事前ロードパス名は無視されます。 また、共有オブジェクトは標準検索ディレクトリからのみプリロードされ、ユーザーID設定モードビットが有効になっている場合にのみ(通常ではありません)。
これはあなたに影響を与えるトラップです。/var/opt
おそらく標準検索目次。