sudoの直下を除いて、論理アプリが機能しないのはなぜですか?

sudoの直下を除いて、論理アプリが機能しないのはなぜですか?

走ろうとしています。ロジックアプリケーションは私のロジックアナライザと通信し、ドライバの下にルールをインストールした後、次の動作を観察しました。

./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実行するときにのみ設定し(自動化したい場合はシェルラッパーを介して)、グローバルに設定しないでください。

関連情報