【问题标题】:Running software build in MSYS2 MINGW32 shell在 MSYS2 MINGW32 shell 中运行软件构建
【发布时间】:2021-11-10 18:42:02
【问题描述】:

我正在尝试运行我在 MSYS2 MINGW32 shell 中构建的一个软件。该软件是 32 位的(没有时间将其移植到 64 位),并且有一个静态链接的可执行文件。以下是我设置构建环境的方法:

  1. 安装了 MSYS2 的新副本;
  2. $ pacman -Syu
  3. 安装了以下软件包: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
  4. Git 签出回购协议
  5. 在 CMake 中运行构建
  6. 构建运行良好并生成 exe。

现在问题开始了:可执行文件无法运行并显示有关缺少 DLL 的错误消息。我将丢失的 DLL 复制到可执行文件的同一个文件夹中,然后弹出另一条错误消息,抱怨错误 0xC000007B,我发现它缺少依赖项。过了一会儿,我发现问题在于某些 DLL 本身缺少依赖项。将最后一个依赖项复制到文件夹中。

现在,一个大问题:我可以在 MINGW32 shell 中完美运行 exe,但我无法在 cmd.exe 中运行它,也无法通过双击 Windows 资源管理器来运行它,这是一个问题(我不能以这种方式发布软件)。有没有办法生成能够从资源管理器和 cmd.exe 运行的二进制文件?这个问题的原因是什么?可以缓解吗?

【问题讨论】:

标签: msys2


【解决方案1】:

我的问题解决了!

经过大量研究,我意识到我的 MSYS2 构建/设置/依赖项没有任何问题。真正的问题是 CMake 隐藏了链接器的一个参数:-mwindows。实际上,我正在使用的库之一 (SDL) 中的 CMake find_package 例程将此参数添加到链接器命令行参数中。

-mconsole 添加到链接器参数(使用add_link_options("-mconsole"))解决了这个问题。 CLI 现在按预期工作。

感谢大家的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-30
    • 1970-01-01
    相关资源
    最近更新 更多