Linux

Linux C/C+ プログラム実行で「Illegal instruction」

Linux Illegal Instruction

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; がない
 }

最後に

めったにお目にかからない現象だと思います。