首页 > 解决方案 > 为什么 Windows 上的 MinGW 不需要静态链接?

问题描述

我已经在我的 Linux 机器上安装了 MinGW 并安装了 MinGW 包,但是,我注意到我无法在没有 MinGW 的 Windows 机器上运行我的程序,我查了一下,很快发现解决方案是静态链接。这行得通,但是必须静态链接所有内容仍然很烦人,而且没有多大意义。我注意到在安装了 MinGW 的 Windows 机器上,我可以编译程序而无需静态链接任何东西,并且该程序将在任何 Windows 机器上成功运行,无论它是否安装了 MinGW。

如果该信息有帮助,我的 Linux 机器正在运行Arch Linux并安装了mingw-w64-gcc AUR软件包。

标签: clinuxwindowsmingw

解决方案


Linux 和 Windows 共享库/动态链接库的发现方式相似。您的 mingw 程序可以在安装了 mingw 的 Windows 中运行,因为安装可能会将 DLL 添加到您的搜索路径中。查看这篇关于 DLL 搜索顺序的文章。

当您静态链接时,所有库代码都会包含在您的可执行文件中。

如果您想与朋友分享您的 mingw 程序,那么您还需要安装它在搜索路径中使用的所有共享库。您可以使用sysinternals listdlls(或其他工具)来查找您的依赖项,并将它们包含在与您的 exe 相同的目录中或将它们安装到库路径(请参阅搜索顺序文章)。

您也可以查看这篇文章;如何找出可执行文件将加载哪些 dll?因为它有很多其他选择。


推荐阅读