this repository からダウンロードしたKali Linuxでi686-elf-gcc
という実行可能ファイルを実行しようとしています。クロスコンパイラです。問題は、ターミナルと私が作成したスクリプトの両方でファイルが存在することを確認できても、実際に実行するときにNo such file or directory
エラーが発生するということです。これを説明する画像は次のとおりです。
また、実行可能ファイルに必要なアクセス許可を与えたと言っておく必要があります。
通常、「実行できません...そのようなファイルまたはディレクトリはありません」は、実行可能バイナリ自体または必要なライブラリの1つが存在しないことを意味します。ライブラリは、他のライブラリ自体も必要とする場合があります。
指定した実行可能ファイルまたはライブラリに必要なライブラリのリストを表示するには、ldd
コマンドを使用できます。
_$ ldd /usr/local/bin/i686-elf-gcc
_
結果のリストに次のような行が含まれている場合
_<library name> => not found
_
次に、上記のライブラリがインストールされ、ライブラリ検索パスにあることを確認することで、問題を解決できます。
この場合、ライブラリーは_/usr/local/lib
_または_/usr/local/lib64
_にある可能性がありますが、何らかの理由でそのディレクトリーがライブラリー検索パスに含まれていません。
追加のライブラリを特定のプログラムまたはセッションでのみ使用できるようにする場合は、LD_LIBRARY_PATH環境変数を使用して、不足しているライブラリを検索する必要のある追加のパスを特定できます。これにより、システムのデフォルトライブラリとの競合の可能性が最小限に抑えられます。
ただし、ライブラリのディレクトリをシステムのデフォルトのライブラリ検索パスに追加する場合は、それを_/etc/ld.so.conf
_ファイルに追加するか、選択した_/etc/ld.so.conf.d/*.conf
_ファイルを作成して、ルートとしてldconfig
コマンドを実行します。ライブラリ検索キャッシュを更新します。
たとえば、不足しているライブラリが_/usr/local/lib64
_にあり、_/etc/ld.so.conf.d
_ディレクトリが存在する場合、次のように_crosscompiler.conf
_ファイルを作成できます。
_# echo "/usr/local/lib64" > /etc/ld.so.conf.d/crosscompiler.conf
# ldconfig
_