Github Action MinGW 0xc0000139 除錯
前一陣子 Github Action 提供的 windows runner 更新了 MinGW 至 11.2.0,但我們的 CI 也因此跳出 0xc0000139
的錯誤碼,那原因是因為路徑沒有設定好,所需的相關 DLL 檔雖然原先是從別的套件所來,他們兩者是一樣的,所以並沒有因此跳出錯誤;然而 MinGW 更新後,兩者就不一樣了,導致出現錯誤。那從表現上來看,當跳出這兩種錯誤的意思分別為
0xc0000139
: 有找到相關同檔名的 DLL 但並不符合版本0xc0000135
: 找不到相關同檔名的 DLL
以下就分享我如何處理這些的流程
ldd in Windows
有在用 Linux 的可能會知道, ldd
是可以幫忙看執行檔執行時連結到哪些 (*.so) ,而 Windows 我也是到最近才知道 Git for Windows 有提供 ldd.exe
做一樣的事情,但在 Windows 就是看執行檔執行時連結到哪些 (*.dll)
檢查及處理
利用 ldd.exe 去檢查程式所連接到 DLL 檔,發現程式連接到的 libstdc++-6.dll
以及 libgcc_s_seh-1.dll
是連接到 C:\Strawberry\c\bin
,這些跟 MinGW 的版本不一樣所以會導致 0xc0000139
錯誤,將之從環境變數 PATH
移除,會發現他們改用到 C:\Strawberry\c\bin
,所以就在把它去掉後,終於用到 Git 下 mingw64 的了;但又會發生找不到 omp 的問題 (0xc0000135
),從 Chocolatey 的這裡中發現會放在 C:\ProgramData\chocolatey\lib\mingw\tools\install\mingw64\bin
之下。
為了方便以及確保我們要使用的 DLL 檔都會最先找到,最後並非把不要用的刪除,而是把 C:\ProgramData\chocolatey\lib\mingw\tools\install\mingw64\bin;C:\Program Files\Git\mingw64\bin;
加在 PATH
前頭,確保使用正確的 DLL 檔,也解決了 0xc000139
以及 0xc000135
的錯誤。