我是C ++新手,现在正在努力编译和链接。 最近我一直在使用cmake,并重新编译一个库(mlpack),使用Boost( Cmake不能findboost 1.51(windows 8) )。
在第一次尝试中,我下载了Windows预编译的二进制文件。 这没有工作得很好,我已经解释了我使用的二进制文件是MSVC,而不是MinGW,因此麻烦。 事实上,在使用MinGW重新编译boost之后,事情就好了。
在这里,我只想得到一个直觉是MSVC和MinGW的二进制文件之间的区别。 我(天真?)认为二进制文件是特定于操作系统/处理器。 MSVC的二进制文件包含什么使MinGW无法使用?
只要他们输出纯粹的C API,将由MSVC和MinGW生成的工件(静态/共享库)(一般适用于其他C编译器)相对比较容易。 这使得C API非常便于携带,这也是许多流行的库仍然倾向于使用纯C API的主要原因之一。
C ++的故事是完全不同的。 不同的C ++编译器产生的工件之间的适当的互操作性的最臭名昭着的障碍是名称修改和应用程序二进制接口 (ABI)的差异。 这一般适用于所有的C ++编译器,而不仅仅是MinGW和MSVC。 如果您想了解更多关于MSVC和MinGW之间的互操作性问题,我建议您阅读以下文章:
简单一点。
Windows讲French
。
MinGW会讲French
, German
和English
。
Unix系统讲German
。
MSVC二进制文件是用French
编写的。
MinGW二进制文件是FrenchAngloGerman
文, FrenchAngloGerman
写的。
UNIX二进制文件是用German
编写的。
Windows需要MinGW将一些German
和English
成French
然后才能理解所有内容。
MinGW不像其他的程序。 它基本上是Windows和Linux之间的一个小型操作系统。 所以大多数情况下,需要修改后的二进制文件才能正常工作。 在MinGW上在Windows上开发程序的事实并不意味着他们将在纯Windows上运行,而没有任何问题。 您仍然需要运送或分发您的程序中使用的MinGW库和可执行文件。