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

最後に

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