C++;windows二进制文件:与MinGW一起使用的条件 我是C++新手,现在我正在努力编译和链接。 最近,我一直在使用cmake和make重新编译一个库(mlpack),该库使用Boost()

C++;windows二进制文件:与MinGW一起使用的条件 我是C++新手,现在我正在努力编译和链接。 最近,我一直在使用cmake和make重新编译一个库(mlpack),该库使用Boost(),c++,windows,linker,mingw32,binaries,C++,Windows,Linker,Mingw32,Binaries,在第一次尝试中,我下载了windows的预编译二进制文件。这并没有很好地解决问题,我已经解释过我使用的二进制文件是用于MSVC的,而不是用于MinGW,因此很麻烦。事实上,在使用MinGW重新编译boost之后,一切正常 在这里,我只想直观地了解一下MSVC和MinGW的二进制文件之间的区别。我(天真地)认为二进制文件是特定于操作系统/处理器的。MSVC的二进制文件中包含了哪些内容使得MinGW无法使用?简单一点 Windows讲法语 MinGW会讲法语,德语和英语 Unix系统讲德语 MSV

在第一次尝试中,我下载了windows的预编译二进制文件。这并没有很好地解决问题,我已经解释过我使用的二进制文件是用于MSVC的,而不是用于MinGW,因此很麻烦。事实上,在使用MinGW重新编译boost之后,一切正常

在这里,我只想直观地了解一下MSVC和MinGW的二进制文件之间的区别。我(天真地)认为二进制文件是特定于操作系统/处理器的。MSVC的二进制文件中包含了哪些内容使得MinGW无法使用?

简单一点

Windows讲法语
MinGW会讲
法语
德语
英语

Unix系统讲
德语


MSVC二进制文件是用法语编写的 MinGW二进制文件是用
FrenchAngloGerman
编写的
UNIX二进制文件是用
德语编写的


Windows需要将一些
德语
英语
翻译成
法语
,然后才能理解所有内容



MinGW与其他程序不同。它基本上是一个介于Windows和Linux之间的迷你操作系统。因此,它主要需要一种经过修改的二进制文件才能正常工作。事实上,你在MinGW上的Windows上开发你的程序并不意味着它们将在纯Windows上运行而不会出现任何问题。您仍然需要发布或分发与程序一起使用的MinGW库和可执行文件

只要MSVC和MinGW导出纯C API,就可以相对容易地组合MSVC和MinGW生成的工件(静态/共享库)(这通常适用于其他C编译器)。这使得C API具有很强的可移植性,这也是为什么许多流行库仍然喜欢使用纯C API的主要原因之一

C++的故事完全不同。由不同的C++编译器产生的伪影之间的正确互操作性的最臭名昭著的障碍是差异和(ABI)。这适用于所有C++编译器,一般不只是MIW和MSVC。如果您想进一步了解MSVC和MinGW之间的互操作性缺陷,我建议您阅读以下文章:


  • 我还是很困惑。这是否意味着为系统编译后,库仍然不能被系统中的所有程序使用?这是否意味着您需要为每个现有编译器进行编译?除了为特定编译器编译的二进制文件外,您永远不能下载任何二进制文件?就语言而言,MSVC的库是法语的,MinGW也讲法语,windows讲法语,不是吗?@Vince I已经试着解释了一点。然而,我认为Haroogan提供了一些关于为什么会出现这些问题的好链接。你应该去看看。谢谢!只是想澄清一下:现在我下载了iconv二进制文件,我有一个包含iconv.lib的文件夹库。。。在使用mingw编译其他库时,假设链接到此库将起作用是不合理的?如何知道这些库是否正常?