WAKU-TAKE-A BLOG
メニューを開く
ブログ
GitHub
ツイッター
プログラム
プロフィール
Home
エラー調査
エラー調査
onnxruntime.dllの初期化ルーチン失敗~原因特定まで
ImageJのプラグインを実行した時にエラーが発生しました。生成AIの力を借りて解決したのですが、かなりの難易度だったので、メモしておきます。 「⑧ WindowsイベントログでどのDLLで落ちているかを特定」などは生成AIに見てもらわないと読み解くだけで大変。 対象エラー: - `java.lang.UnsatisfiedLinkError: ...\onnxruntime.dll: ダイナミック リンク ライブラリ (DLL) 初期化ルーチンの実行に失敗しました。` ## 原因までの流れの要約 1. `onnxruntime.dll` のロードが失敗していたが、Dependencies上はMissingが見えない 2. PATH衝突も疑ったが、PATH最小化でも再現 3. イベントログで **javaw.exe が `msvcp140.dll` でクラッシュしている**ことを特定 4. しかも `msvcp140.dll` は System32 ではなく **JDKのbin配下**が使われていた 5. その `msvcp140.dll` の不整合/不具合により、onnxruntimeロード時にアクセス違反で落ちていた 6. 対策としては **JDKを最新化する(推奨)** → 正常動作 ## ① VC++再頒布可能パッケージ(ランタイム)不足の確認 ### 実行したコマンド(成功) Visual C++ が入っているかを広く列挙: ```powershell Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*,HKLM:\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | Where-Object { $_.DisplayName -match 'Visual C\+\+' } | Select-Object DisplayName, DisplayVersion | Sort-Object DisplayName ``` ### 結果の概要 - VC++ 2022 / v14 の x64/x86 が入っていた(例:`Microsoft Visual C++ v14 Redistributable (x64) - 14.50...`) - よって「VC++不足」が主因の可能性は低い、と判断。 出力の例: ```powershell DisplayName DisplayVersion ----------- -------------- ・・・ Microsoft Visual C++ v14 Redistributable (x64) - 14.50.35719 14.50.35719.0 Microsoft Visual C++ v14 Redistributable (x86) - 14.50.35719 14.50.35719.0 ``` --- ## ② 実行Javaの確認 ### 実行したコマンド ```powershell java --version ``` ### 結果の概要 - JAVA 17 が入っていることが確認できた。 - ただしこれは「コンソールのjava」であり、ImageJが使っているjavaとは別の場合があるため、ImageJ内の `java.version` も確認し、最終的に `17.0.8` を使用している確定。(ImageJ実行直後にステータスバーに表示される) --- ## ③ ONNX Runtime がCPU版かGPU版か確認 ### GitHubのソースの `pom.xml` の要点 ```xml
com.microsoft.onnxruntime
onnxruntime
1.25.1
``` ### 結果の概要 - `onnxruntime-gpu` ではなく **CPU版** を使用。 - よって「CUDA/cuDNN不足」が主因の可能性は低い、と判断。 --- ## ④ CPU命令セット(AVXなど)差の可能性を確認 ### 実行したコマンド ```cmd wmic cpu get name ``` ### 結果の概要 - CPU: `Intel(R) Core(TM) i7-10700...` - i7-10700 は AVX/AVX2 対応のため、AVX非対応によるロード失敗を除外。 --- ## ⑤ 依存DLL不足(Missing DLL)を Dependencies で確認 [こちら](https://github.com/lucasg/Dependencies)からダウンロードします。 ### 実施内容(成功) - `onnxruntime.dll` を Dependencies(GUI)で開き、Missingが出るか確認。 - `onnxruntime_providers_shared.dll` も同様に確認。 ### 結果の概要 - どちらも「Missingが大量に出ている」状況ではなかった。 - つまり「単純に依存DLLが無い」ではなく、**初期化時クラッシュ**など別要因を疑う段階へ。 --- ## ⑥ PATH衝突(CUDA / OpenCV / Pythonなど)の可能性確認 ### 実行したコマンド ```powershell $env:Path -split ';' | Select-String -Pattern 'cuda|cudnn|onnx|opencv|intel|openvino|tensorrt|anaconda|miniconda|python|mkldnn|mkl|oneapi' -CaseSensitive:$false ``` ### 結果の概要 - PATHに以下が含まれていた(抜粋): - CUDA 11.8 - OpenCV - WinPython - これはDLL衝突を起こし得るため疑わしかった。 --- ## ⑦ PATHを最小化しても再現するか(衝突の切り分け) ### 実施内容(成功) PowerShellで、そのプロセス内だけ PATH を最小化して ImageJ を起動。 ```powershell $env:Path="C:\Windows\System32;C:\Windows" & "C:\[パス]\ImageJ.exe" ``` ### 結果の概要 - PATHを最小化しても `onnxruntime.dll` 初期化失敗は再現。 - よって「PATHにあるCUDA/OpenCV/Pythonが主因」は後退。 --- ## ⑧ WindowsイベントログでどのDLLで落ちているかを特定 ### 最初の問題 `wevtutil` のXPath(containsなど)がその環境で使えず、別手段に変更。 ### 実行したコマンド(成功) 直近のアプリクラッシュを20件出し、`javaw.exe` のブロックだけを抽出: ```powershell wevtutil qe Application /q:"*[System[(EventID=1000)]]" /c:20 /f:text | Select-String -Context 0,20 -Pattern "障害が発生しているアプリケーション名: javaw\.exe" ``` ### 結果(決定打) イベントログに以下が出た(要点): - 障害アプリ:`javaw.exe`(JDK 17.0.8) - **障害モジュール:`msvcp140.dll`** - **障害モジュールパス:`C:\Program Files\Java\jdk17.0.8\bin\msvcp140.dll`** - 例外コード:`0xc0000005`(アクセス違反=クラッシュ) ここから分かったこと: - 例外は onnxruntime.dll そのものではなく、**C++標準ライブラリ(msvcp140.dll)側でクラッシュ**している。 - しかも System32 ではなく、**JDKのbin配下にある msvcp140.dll が使われている**。 出力の例: ```posershell Event[8] Log Name: Application Source: Application Error Date: 2026-05-07T10:49:27.6300000Z Event ID: 1000 Task: アプリケーション クラッシュ イベント Level: エラー Opcode: 情報 Keyword: N/A > 障害が発生しているアプリケーション名: javaw.exe、バージョン: 17.0.8.0、タイム スタンプ: 0xc17a3ae6 障害が発生したモジュール名: msvcp140.dll、 バージョン: 14.29.30135.0、タイム スタンプ: 0x612d915a 例外コード: 0xc0000005 フォールト オフセット: 0x0000000000013020 フォールト プロセス ID: 0x1320 アプリケーションのフォールトの開始時刻: 0x1DCDDC3AAD64EB1 Faulting アプリケーション パス: C:\Program Files\Java\jdk17.0.8\bin\javaw.exe Faulting モジュール パス: C:\Program Files\Java\jdk17.0.8\bin\msvcp140.dll Report Id: 89cb7871-3fae-4dc7-be92-04b134524852 Faulting パッケージの完全名: Faulting パッケージ相対アプリケーション ID: ``` --- ## 対策方法 dllを変更し簡易検証: - **JDK側の `msvcp140.dll`(14.29.30135.0)を、System32にある新しい版(14.50.35719.0)相当に置換した** → 結果、動作した。 JDKをバージョンアップ: - 正攻法の恒久対策。 (JDK更新により、同梱DLLのバージョンが適切になった、または同梱の仕方が変わって衝突/クラッシュが解消した可能性が高い)
この記事をシェアする
X
Facebook
B!
はてブ
Copy
URL
0 件のコメント :
コメントを投稿
Previous
自己紹介
WAKU-TAKE-A
詳細プロフィールを表示
人気記事
サクラエディターでGrep置換
Visual Studioのソリューションファイルのダウングレード
Markdown PDFのすすめ
Zenfone2 Laser ZE500KLをRoot化してみます
Python3でBasic認証
Markdown TOCのすすめ
ゾーン識別子によるエラー
Python3でDigest認証
IronPythonのスクリプトをVisual Studio Codeで実行する方法(旧)
GitBucket+OpenLDAPでGitHubクローンな環境
カテゴリー
blogger
( 5 )
Bsic認証
( 1 )
Digest認証
( 1 )
dll化
( 1 )
Git
( 3 )
GitBucket
( 3 )
Google Form
( 1 )
IronPython
( 14 )
Ldap
( 3 )
Livet
( 2 )
Markdown
( 4 )
Markdown PDF
( 1 )
Markdown TOC
( 1 )
MVVM
( 4 )
OpenCV
( 5 )
OpenCvSharp
( 4 )
OpenLdap
( 3 )
PDF
( 1 )
pip
( 1 )
Pyhon
( 3 )
R.NET
( 1 )
ROOT
( 1 )
R言語
( 1 )
TWRP
( 1 )
Vaster2
( 2 )
Visual Studio
( 1 )
Visual Studio Code
( 4 )
Windows
( 5 )
WPF
( 3 )
XAML
( 3 )
ZE500KL
( 1 )
Zenfone2 laser
( 1 )
ZXing
( 1 )
ZXing. Net
( 1 )
エラー調査
( 1 )
コーヒー
( 1 )
サクラエディタ
( 1 )
ショッピング
( 2 )
データバインディング
( 3 )
テンプレート
( 3 )
リモートデスクトップ接続
( 5 )
在宅勤務
( 5 )
生成AI
( 1 )
注意点
( 1 )
統計解析R
( 1 )
特別定額給付金
( 1 )
淹れ方
( 1 )
ブログアーカイブ
5月 2026
( 1 )
3月 2026
( 1 )
12月 2025
( 1 )
10月 2023
( 2 )
5月 2020
( 3 )
4月 2020
( 4 )
7月 2019
( 1 )
5月 2019
( 5 )
2月 2019
( 1 )
12月 2018
( 2 )
11月 2018
( 4 )
10月 2018
( 3 )
8月 2018
( 5 )
7月 2018
( 3 )
6月 2018
( 7 )
2月 2018
( 2 )
10月 2016
( 1 )
0 件のコメント :
コメントを投稿