Arduino IDE で コンパイルエラー status 3 が出てしまいコンパイル出来ません。

最終更新日 2023年2月23日

2023年2月22日 ThinkPadT440pで新規に仕立てたArduinoIDEでも exit status 3 が発生してしまいました


大失敗してしまったようです。これまで普通にビルドしてバイナリファイルをマイコンに転送・書込出来ていたArduinoIDE環境なのですが、status 3というコンパイルエラーが出て役立たずになってしまいました。原因がすぐに判らず戸惑っています。

現時点で判っている事は、ボードマネージャ“Raspberry Pi Pico/RP2040”がインストールする Python3 が何らかの理由で起動出来ない事が原因のようです。

ここでは発生から 原因追及のために行った作業とその結果を綴っています。


この問題の起因は、WizFi360-EVB-PICO用に作成したスケッチがあるタイミングでビルド出来なくなった事です。

exit status 3
C:\Program Files (x86)\Arduino\arduino-builderが3を返しました。
ボードWIZnet WizFi360-EVB-Picoに対するコンパイル時にエラーが発生しました。

結局のところPC環境を何か弄ったことでこの状況に陥ったようです。ただ、その経緯に思い当たるモノがありません。精々あるのは、MicroPithon環境を追加したくて Thonny をインストールしたのですが、どうしても起動しないため諦めたという経緯はあります。
コンパイラのエラーであり、パスもC:\Program Files (x86)\Arduino\arduino-builder\と書かれていることから、IDE自体をアンインストールして、新規再インストールすれば解決するのかと思いましたが、安易でした。状況は改善されませんでした。

そもそも論として status 3 というエラーがなんなのかさえ判っていません。
そこで、このエラーステータスを調査することで原因を探ることにします。長丁場になりそうです。

先人がエラーステータスについて調査されていました。それによると

exit status 1

終了ステータス 1 エラーは、コードのエラーが原因で発生するコンパイル時エラーです。
このエラーを解決するには、コンパイルとアップロードのために Arduino IDE の設定を verbos に設定して詳細は情報を得る必要があります。

exit status 2

終了ステータス 2 エラーは、

exit status 3

終了ステータス 3 エラーは、

STM32Fのコンパイルが通ることを確認しました。となると原因はRP2040用のコンパイラに限定して考えてみてもよいのかもしれません。となると、Thonny環境をインストールしたことによる影響の可能性は十分あります。Python3.8.1以降が必要と云われ、インストールしましたがここに問題があるのかもしれません。Arduino-Picoをインストール後にPython3.6がインストールされていたように思います。このバージョンの違いが問題なのか?

エラーメッセージを遡ってみると、

"C:\\Users\\ToolsBox\\AppData\\Local\\Arduino15\\packages\\rp2040\\tools\\pqt-python3\\1.0.1-base-3a57aed/python3" -I "C:\\Users\\ToolsBox\\AppData\\Local\\Arduino15\\packages\\rp2040\\hardware\\rp2040\\2.7.1/tools/signing.py" --mode header --publickey "C:\\Users\\ToolsBox\\AppData\\Local\\Arduino15\\packages\\rp2040\\hardware\\rp2040\\2.7.1\\libraries\\EEPROM\\examples\\eeprom_clear/public.key" --out "C:\\Users\\ToolsBox\\Documents\\Arduino\\tmp/core/Updater_Signing.h"
Fatal Python error: initfsencoding: unable to load the file system codec
ModuleNotFoundError: No module named 'encodings'

Fatal Python error とあるので可能性が高いと思いました。
早速Python3.6を用意してインストールし直し、コンパイルし直してみましたがエラーは変わらず発生しました。もしかしたらx64版ではダメなのか?ArduinoIDEはx86版です。
再度Python3.6X86版をインストールして見ます。

結果が出ました。相変わらずexit status 3でコンパイルエラーでした。原因は別のところにあるのですね。

Forum:https://forum.arduino.cc/t/exit-status-3/617467にはCLEAN UP BEFORE INSTALLING ANOTHER COPY OF THE IDE OR ARDUINO CREATE.pdfの中身を見てレジストリのクリーンナップをしなさいとあります。検討したいと思います。

このPDFではCCleanerでレジストリの整理をすれば良いというニュアンスの記載でしたので、実行したのですが、解決しませんでした。

エラーメッセージについてPythonでよく見かけるエラーのようです。可成り昔から問題視されているのに一向に解決されていないという書込もありました。

C:\Users\ToolsBox\AppData\Local\Arduino15\packages\rp2040\tools\pqt-python3\1.0.1-base-3a57aed\\

このフォルダ内には python37.dll が存在することが判りました。多分外部には必要ないのでしょう。そこでPython3.6X86版は削除してもう一度確認する事にしました。


Pythonのフォーラムにこんな書込がありました

Python (Anaconda) の再インストール後に起動しないエラーへの対処(環境変数の設定)
https://www.wizard-notes.com/entry/python/set-pythonhome

エラー内容

Fatal Python error: init_fs_encoding: failed to get the Python codec of the filesystem encoding
Python runtime state: core initialized
ModuleNotFoundError: No module named 'encodings'

エラー表記からすると近いのかと思い、この解決方法である環境変数の上書き

解決策

set PYTHONHOME=

が紹介されていました。ところが、解決しませんでした。


Python 3.x に対する質問として、https://teratail.com/questions/190121 に“pythonでFatal Python Errorが出て動作しない”と云うのがありました。python-3.7.3の環境で、

エラー内容

C:\Users\owner>python
Fatal Python error: Py_Initialize: unable to load the file system codec
ModuleNotFoundError: No module named 'encodings'
Current thread 0x00000e30 (most recent call first):

この解決策は【コントロールパネルからpython(とpycharm)をアンインストールし、新しいバージョンをインストール】した事とのことです。
Windows7の場合 python3.8までしかインストール出来ないようです。python3.9の場合インストーラが拒否します。
python3.8.10をインストールして解決するのか確認して見ましたが、 相変わらず exit status 3のままでした。


ArduinoIDEの再インストールやpythonの再インストールでは改善されないことから、再インストールしても更新されないファイルに何らかの問題が残っているからだと考えられます。
前回、CCleanerによるレジストリのクリアを実行しても解決しなかったのですが、もしかしたらArduinoIDEがインストール済みの状態ではレジストリのクリア効果が無かったのかもしれないと考えました。
そこで、ArduinoIDEを一旦削除し、CCleanerによるレジストリの掃除を実行してからArduinoIDEの再インストールを実行し、コンパイルを実行して結果を求めることにしました。

CCleanerを実行したところ、確かに arduino-builder のレジストリがゴミになっている事は確認出来、削除をしました。
しかし、ArduinoIDEの再インストール後に動作確認をしたのですが、結果は変わらず、exit status 3のままでした。
当ては外れました。


C:\Users\ToolsBox\AppData\Local\Arduino15\ の中身はArduinoIDEを一旦削除しても残っています。だからArduinoIDEをUpdateしても環境ファイル(preferences.txt)が維持されているわけです。
ここに問題があるのかと考え、\Arduino15\ の中身を手動で削除し、ArduinoIDEもアンインストールして、
CCleanerを実行した後、
PCの再起動も実施した後にArduinoIDEの再構築をして見ました。

結果ですが、相変わらずexit status 3のままでした。


今一度再確認をします。単純なスケッチ Blink.inoに対してボードマネージャでターゲットボードを変更し、ビルドを試みてコンパイルが完了するか確認しました。

ボード ビルド結果 コメント
UNO 完了  
ESP32 DEV Module 完了  
Generic STM32F103C 完了  
WizFi360-EVB-Pico exit status 3  
RaspberryPi PIco exit status 3  

ここまで来るとArduinoIDEとRP2040コンパイラとの遣り取りに何らかの問題があるということで絞り込んでも良いように思います。
RP2040の開発環境について、マルツオンラインのサイトの記事が興味深いです。ArduinoIDE環境がターゲットでは無いのですが。
https://www.marutsu.co.jp/pc/static/large_order/zep/m-z-pico-da2
これによるとC/C++環境下のコンパイラ ARM GCC Compiler に対して Python3 が補助的な役割をするみたいです。


2023年2月22日 ThinkPadT440pで新規に仕立てたArduinoIDE1.8.19でも exit status 3 が発生してしまいました

とりあえずPicoに対するプログラミングが出来る様に仕立てたThinkPadT440p上のArduinoIDE1.8.19なのですが、今日起動した途端に【Pythonは動作を停止しました】とメッセージを出し、以降RP2040ターゲットのコンパイルを実施すると exit status 3 が発生するようになってしまいました。

これで明確になりました。ArduinoIDEがリンクしているPython3.7がクラッシュしてしまうことが原因のようです。
T440pではArduinoIDEを起動した先に、このアラートダイアログが表示されました。

問題の署名:

問題イベント名: APPCRASH
アプリケーション名: python3.exe
アプリケーションのバージョン: 3.7.2150.1013
アプリケーションのタイムスタンプ: 5c200a7f
障害モジュールの名前: ucrtbase.DLL
障害モジュールのバージョン: 10.0.10586.9
障害モジュールのタイムスタンプ: 5642c5f8
例外コード: 40000015
例外オフセット: 0008469a
OS バージョン: 6.1.7601.2.1.0.256.48
ロケール ID: 1041
追加情報 1: c4ed
追加情報 2: c4ede652d1d9918b32c35bb5f6d20478
追加情報 3: 5535
追加情報 4: 5535db82ec08795d58d69c23a29fe612

“ucrtbase.DLL”は C:\Windows\System32\ にあります。このファイルの機能は明確な記述は見つかっていません。
Microsoft 社製なので、WindowsUpdateの対象かと思います。
検索するとそれなりにヒットするのですがまともな結果が得られるわけではありません。

“ucrtbase.DLL”の差替で改善するのかどうかも判断が出来ません。

python3.exeの存在値が判りました。
C:\Users\ToolsBox\AppData\Local\Arduino15\packages\rp2040\tools\pqt-python3\1.0.1-base-3a57aed

T440pに関しては初期段階だったためか、“Raspberry Pi Pico/RP2040”を一旦削除して、再度インストールしたとことエラーは回避出来るようになりました。


Arduino-Pico作者のフォーラムにヒントがありました。
スレッドタイトル:ModuleNotFoundError:「エンコーディング」という名前のモジュールはありません' #976
https://github.com/earlephilhower/arduino-pico/issues/976 

コマンドプロンプトを立ち上げて、次のコマンドを打ち込みます。<user>には実際のユーザ名を入力してください。

C:\Users\<user>\AppData\Local\Arduino15\packages\rp2040\tools\pqt-python3\1.0.1-base-3a57aed\python3

これを実行して、結果として
Fatal Python error: Py_Initialize: unable to load the file system codec
ModuleNotFoundError: No module named 'encodings'

を得た場合は\1.0.1-base-3a57aed\の中身に何らかの展開ミスがあるのでは無いかと云うことです。
このスレッドではArduino-Picoの2.6.1は安定バージョンなのでArduino-Picoを一旦削除し2.6.1をインストールしなさい とのことでした。やってみようかと思います。

結果が出ました。解決しませんでした。

C:\Users\<user>\AppData\Local\Arduino15\packages\rp2040\tools\pqt-python3\1.0.1-base-3a57aed\python3

これを実行して、結果として
Fatal Python error: Py_Initialize: unable to load the file system codec
ModuleNotFoundError: No module named 'encodings'

が出てしまいます。改善無しでした。


戯言(nonsense)に戻る


問い合わせ頁の表示


免責事項

本ソフトウエアは、あなたに対して何も保証しません。本ソフトウエアの関係者(他の利用者も含む)は、あなたに対して一切責任を負いません。
あなたが、本ソフトウエアを利用(コンパイル後の再利用など全てを含む)する場合は、自己責任で行う必要があります。

本ソフトウエアの著作権はToolsBoxに帰属します。
本ソフトウエアをご利用の結果生じた損害について、ToolsBoxは一切責任を負いません。
ToolsBoxはコンテンツとして提供する全ての文章、画像等について、内容の合法性・正確性・安全性等、において最善の注意をし、作成していますが、保証するものではありません。
ToolsBoxはリンクをしている外部サイトについては、何ら保証しません。
ToolsBoxは事前の予告無く、本ソフトウエアの開発・提供を中止する可能性があります。

商標・登録商標

Microsoft、Windows、WindowsNTは米国Microsoft Corporationの米国およびその他の国における登録商標です。
Windows Vista、Windows XPは、米国Microsoft Corporation.の商品名称です。
LabVIEW、National Instruments、NI、ni.comはNational Instrumentsの登録商標です。
I2Cは、NXP Semiconductors社の登録商標です。
その他の企業名ならびに製品名は、それぞれの会社の商標もしくは登録商標です。
すべての商標および登録商標は、それぞれの所有者に帰属します。