【问题标题】:mingw make gives error code -107374181 when running executablemingw make 在运行可执行文件时给出错误代码-107374181
【发布时间】:2021-10-11 17:36:04
【问题描述】:

我在 Windows 下的 CI 遇到了一些问题(在我自己的 Windows 安装下没有出现任何问题)。我使用 GitHub Actions 作为 CI 提供者。

当 make 尝试使用 cmd.exe 作为 shell 运行与某个 DLL 链接的可执行文件(在与同一个 DLL 链接的早期调用中似乎工作正常)时,它会导致以下输出(根据 mingw32-make -d):

Creating temporary batch file C:\Users\RUNNER~1\AppData\Local\Temp\make3992-9.bat
Batch file contents:
    @echo off
    cd lib && ..\\test\\unit\\gencore_test.exe
cd lib && ..\\test\\unit\\gencore_test.exe
CreateProcess(C:\Users\RUNNER~1\AppData\Local\Temp\make3992-9.bat,C:\Users\RUNNER~1\AppData\Local\Temp\make3992-9.bat,...)
Putting child 000000000245A570 (gencore_test) PID 38130688 on the chain.
Live child 000000000245A570 (gencore_test) PID 38130688 
Reaping losing child 000000000245A570 PID 38130688 
mingw32-make: *** [test/unit/gencore_test.mk:8: gencore_test] Error -1073741819
Cleaning up temp batch file C:\Users\RUNNER~1\AppData\Local\Temp\make3992-9.bat
Removing child 000000000245A570 PID 38130688 from chain.

(DLL 包含在lib 文件夹中,这就是为什么我在调用 exe 之前cd进入它。)

这个错误发生在main 被调用之前(因为我在第一条语句中调用了puts),这让我认为这是 lib 加载器的问题。

我只能假设这是一个虚假的错误代码,显然在网上搜索它没有结果,尽管我没有搜索过 make 或 mingw 源代码以查看它是否曾被提及。

如果我将 SHELL 替换为 sh.exe 它会给出错误 2816,这在我的个人 Windows 安装中也不会发生,并且没有在 MSDN 上记录为已知错误(文档从 2404 跳过到 3000)。

我认为这与 DLL 有关,因为它发生在程序运行时之前,但是链接到同一个库的其他可执行文件工作正常这一事实让我认为这可能是构建过程中的一个问题 - 所以这里是可执行文件的编译和链接:

clang -c -std=c17 -DWIN=1 -DDWN=2 -DLNX=3 -DBSD=4 -DPLATFORM=WIN -g -O0 -DMODE=DEBUG -D_MT -D_DEBUG -Igenesis/gencore/include  -Igenesis/vendor/c11compat/mesa/include -Igenesis/vendor/dirent/include -o test/unit/gencore/main.o test/unit/gencore/main.c
clang -o test/unit/gencore_test.exe test/unit/gencore/main.o  -lshlwapi.lib -Wl,-nodefaultlib:libcmt.lib -llibcmtd.lib -fPIE -Llib -lgencore

(我认为其中一些可能无关紧要,但它可能会导致我不知道的深奥冲突,所以我把它留在了)

事实上,它在我自己的安装中使用相同的调用运行良好,并且鉴于我专门安装了 Windows 来解决这个问题,因此它尽可能接近原版安装(使用与CI 等)让我认为它是 GitHub 操作方面的配置?但话又说回来,有些可执行文件可以工作,而有些则不能,所以它真的悬而未决。

如果您知道这里发生了什么并能够提供帮助,非常感谢您

存储库在这里:https://github.com/Th3T3chn0G1t/GenesisEngine,虽然构建系统相当复杂,所以如果我错过了一个细节或需要澄清的东西,我可以在这里提炼出来。

【问题讨论】:

    标签: c windows continuous-integration github-actions linkage


    【解决方案1】:

    我最终找到了答案 - 事实证明 Github CI 可能会发生一些文件系统损坏,这是一个已知问题,此后我的 Linux CI 中开始出现类似问题。

    我的解决方案只是禁用 CI 并稍后重新启用它,以便可能获得不同的主机。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-04
      • 1970-01-01
      • 2011-09-08
      • 1970-01-01
      • 2023-03-13
      相关资源
      最近更新 更多