c - 为什么 Windows 上的 MinGW 不需要静态链接?
问题描述
我已经在我的 Linux 机器上安装了 MinGW 并安装了 MinGW 包,但是,我注意到我无法在没有 MinGW 的 Windows 机器上运行我的程序,我查了一下,很快发现解决方案是静态链接。这行得通,但是必须静态链接所有内容仍然很烦人,而且没有多大意义。我注意到在安装了 MinGW 的 Windows 机器上,我可以编译程序而无需静态链接任何东西,并且该程序将在任何 Windows 机器上成功运行,无论它是否安装了 MinGW。
如果该信息有帮助,我的 Linux 机器正在运行Arch Linux并安装了mingw-w64-gcc AUR
软件包。
解决方案
Linux 和 Windows 共享库/动态链接库的发现方式相似。您的 mingw 程序可以在安装了 mingw 的 Windows 中运行,因为安装可能会将 DLL 添加到您的搜索路径中。查看这篇关于 DLL 搜索顺序的文章。
当您静态链接时,所有库代码都会包含在您的可执行文件中。
如果您想与朋友分享您的 mingw 程序,那么您还需要安装它在搜索路径中使用的所有共享库。您可以使用sysinternals listdlls(或其他工具)来查找您的依赖项,并将它们包含在与您的 exe 相同的目录中或将它们安装到库路径(请参阅搜索顺序文章)。
您也可以查看这篇文章;如何找出可执行文件将加载哪些 dll?因为它有很多其他选择。
推荐阅读
- python - 我得到相反的答案,当时间为 0 -11 小时时,它正在打印晚上好
- javascript - 用于检查自定义下拉列表中的必填字段的 JQuery 函数中的错误
- reactjs - React dom 元素被加载但实际上并没有显示在浏览器中
- jquery - 在 SharePoint 2013 中使用 JQUERY 删除动态生成的 div
- php - tcpdf html 表格行超过 500 行导致空白页
- python - 使用 -m 选项或复制到 Windows 中的不同路径位置时,无法使用嵌入式 python 运行覆盖工具
- java - 使用其中一个键是动态的 Jackson Json 进行反序列化
- python - datetime.combine() 和 pytz.localize() 之间的区别
- php - php正则表达式仅从数字中删除破折号
- c# - 网站项目上的 Roslyn 编译器错误。找不到 CodeDom