Linuxで作成したプログラムで謎の「Illegal instruction」が発生したときの回避方法を紹介します。
スポンサーリンク
発生パターン
マシンアーキテクチャの問題
異なるマシンアーキテクチャー用にコンパイルされたプログラムを実行すると発生します。
Linux(x86)上で、インテル系のx86 CPU用のプログラムではなく、ARMなどの別CPU用にコンパイルされたプログラムを実行した場合など。
GCCなどのコンパイラや環境の問題
私が経験したのは以下のパターンです。
CentOS 7.6でビルドしたプログラムを Red Hat Enterprise Linux Server 7.5 で実行すると「Illegal instruction」が表示されて動作しない。
Red Hat Enterprise Linux Server 7.5 でビルドし直すと動作しました。
ソースがあったので、以下でリビルド。
$ $ ./configure $ make
コーディングの誤り
return 文が抜けていてもコンパイルエラーにならずにプログラムが作成されて実行すると発生。
$ bool func() { int i; i = 1; ★ return true; や return false; がない }
最後に
めったにお目にかからない現象だと思います。
スポンサーリンク
スポンサーリンク