C 为什么Windows上的MinGW不需要静态链接?

C 为什么Windows上的MinGW不需要静态链接?,c,linux,windows,mingw,C,Linux,Windows,Mingw,我已经在我的Linux机器上安装了MinGW并安装了MinGW包,但是,我注意到我无法在没有MinGW的Windows机器上运行我的程序,我查找了它,很快发现解决方案是静态链接。这是可行的,但仍然很烦人,必须静态链接所有内容,而且没有多大意义。我注意到,在安装了MinGW的Windows机器上,我可以编译一个程序,而无需静态链接任何东西,而且无论是否安装了MinGW,该程序都可以在任何Windows机器上成功运行 My Linux box正在运行Arch Linux并安装了mingw-w64-g

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


My Linux box正在运行Arch Linux并安装了
mingw-w64-gcc AUR
软件包,如果这些信息有帮助的话。

Linux和Windows共享库/动态链接库在发现它们的方式上是相似的。您的mingw程序在安装了mingw的windows中工作,因为安装可能会将DLL添加到您的搜索路径中。查看DLL搜索顺序

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

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


你也可以看看这篇文章;因为它还有很多其他选项。

当程序因为缺少dll而无法运行时,它应该说明是哪个dll。然后您可以找到它(至少在windows上,它们应该随mingw-w64一起提供),并随应用程序一起分发。mingw不提供自己的C库。相反,它采用了微软的,这很可能在任何Windows系统上都可用。但它确实提供了其他库,如果您在动态链接的可执行文件中使用其中一个库,那么您肯定需要它在运行时出现。这不一定需要来自完整的MinGW安装,但它确实需要存在。我应该澄清一下,因为据我所知,你的评论说我可以运行MinGW编译的程序,因为MinGW安装在我的windows计算机上。我要告诉你的是,当一个程序在我的windows机器上用mingw编译而没有静态链接时,它可以在没有mingw的任何其他windows机器上运行,而在linux上用mingw编译需要我静态链接我的所有库以达到同样的效果,所以John在评论中回答了这一点。对于linux,您需要经历类似的过程。检查并使用此处提到的ldd