走ろうとしています。ロジックアプリケーションは私のロジックアナライザと通信し、ドライバの下にルールをインストールした後、次の動作を観察しました。
./Logic
./Logic: cpp_libs/libc.so.6: version `GLIBC_2.18' not found (required by /usr/lib/x86_64-linux-gnu/libstdc++.so.6)
sudo bash
./Logic
./Logic: cpp_libs/libc.so.6: version `GLIBC_2.18' not found (required by /usr/lib/x86_64-linux-gnu/libstdc++.so.6)
sudo ./Logic
# Application runs
この奇妙な行動の理由は何ですか?
私はUbuntu 14.04を実行しています。
答え1
動作の違いの合理的な説明は、作業中のコマンドと機能しないコマンドは、ライブラリ検索パスが異なるように設定されているため、異なるライブラリをロードすることですLD_LIBRARY_PATH
。重要かもしれませんが、他の可能性の低い環境変数がありますLD_PRELOAD
(例:一部の実行可能ファイルに依存するスクリプトですが、エラーメッセージが一致しないPATH
場合)。./Logic
Bashの対話型インスタンスでこのコマンドを呼び出すのがうまくいかず、Worksから直接呼び出す理由の合理的な説明は、Bashの対話型インスタンスが実行されるファイルでこの環境を設定するsudo
ことです。.bashrc
実行すると、sudo
ほとんどすべての環境変数が消去されるためsudo ./Logic
動作しますが、実行するsudo bash
とその変数がリセットされる./Logic
ため動作しません。bash
.profile
環境変数は(セッションの開始時に実行されます)に設定する必要があります。.bashrc
。あなたの症状は環境変数変更の問題の1つの特徴です.bashrc
。
LD_LIBRARY_PATH
設定ファイルにまったく存在しない可能性がある設定です。システムライブラリを非表示にするディレクトリを追加すると、非互換性が発生する可能性があります。特定のプログラムを実行するために必要な場合は、プログラムをLD_LIBRARY_PATH
実行するときにのみ設定し(自動化したい場合はシェルラッパーを介して)、グローバルに設定しないでください。