【发布时间】:2021-11-10 18:42:02
【问题描述】:
我正在尝试运行我在 MSYS2 MINGW32 shell 中构建的一个软件。该软件是 32 位的(没有时间将其移植到 64 位),并且有一个静态链接的可执行文件。以下是我设置构建环境的方法:
- 安装了 MSYS2 的新副本;
$ pacman -Syu- 安装了以下软件包:
git mingw-w64-i686-gcc mingw-w64-i686-cmake mingw-w64-i686-SDL mingw-w64-i686-SDL_mixer mingw-w64-i686-zlib mingw-w64-i686-libpng mingw-w64-i686-make - Git 签出回购协议
- 在 CMake 中运行构建
- 构建运行良好并生成 exe。
现在问题开始了:可执行文件无法运行并显示有关缺少 DLL 的错误消息。我将丢失的 DLL 复制到可执行文件的同一个文件夹中,然后弹出另一条错误消息,抱怨错误 0xC000007B,我发现它缺少依赖项。过了一会儿,我发现问题在于某些 DLL 本身缺少依赖项。将最后一个依赖项复制到文件夹中。
现在,一个大问题:我可以在 MINGW32 shell 中完美运行 exe,但我无法在 cmd.exe 中运行它,也无法通过双击 Windows 资源管理器来运行它,这是一个问题(我不能以这种方式发布软件)。有没有办法生成能够从资源管理器和 cmd.exe 运行的二进制文件?这个问题的原因是什么?可以缓解吗?
【问题讨论】:
-
您忘记复制一些 DLL,这始终是原因。安装
mingw-w64-i686-ntldd并运行ntldd -R my_app.exe以获取所有使用的dll列表,然后复制/mingw32/bin中的那些,并跳过C:\Windows中的那些。 -
做到了!问题是似乎缺少的都不是来自/mingw32/bin。这是列表:gist.github.com/danielt3/459593eddd4d0ceeeecb210bef23ec9e
-
你能显示完整的输出吗?
-
也尝试从 MINGW32 shell 和 CMD 运行
ntldd -R并比较输出。
标签: msys2