4

我目前正在编译一个与 gcc 一起使用的 makefile 提供的开源优化库(本机 C++)。由于我是 Windows 用户,我很好奇我看到的编译它的两个选项,使用带有 MinGW/Cygwin 的 gcc 或手动构建 Visual Studio 项目并编译源代码。

1) 如果我使用 MinGW/Cygwin + gcc 进行编译,生成的 .lib(静态库)是否需要来自 MinGW/Cygwin 的任何库?即我可以将我编译的 .lib 分发到没有 MinGW/Cygwin 的 Windows PC 并且它仍然可以运行吗?

2)除了编译器本身之间的性能差异之外,在使用 MinGW/Cygwin 和 gcc 进行编译时是否存在相关的开销——例如仿真层是否编译到库中,或者 gcc 是否构建了本机 Windows 库?

3)如果速度是我图书馆的主要目标,使用哪种方法最好?我意识到这是非常开放的,我可能最好运行自己的基准测试,但如果有人在这里有经验,那就太好了!

4

1 回答 1

5

Cygwin 的重点是Linux 仿真层,默认情况下(即如果您不交叉编译),二进制文件需要cygwin1.dll运行。

MinGW 并非如此,它创建的二进制文件与来自 MSVC 的二进制文件一样“本机”。但是,MinGW 带有自己的一组运行时库,特别是libstdc++-6.dll. 该库也可以使用 静态链接-static-libstdc++,在这种情况下,您可能还想使用 编译-static-libgcc

这并不意味着您可以自由地混合来自不同编译器的 C++ 库(请参阅mingw.org 上的此页面)。如果您不想将自己限制extern "C"在库的接口上,您很可能必须选择一个编译器并坚持使用它。

至于您的性能问题:在实际与操作系统交互时,使用 Cygwin 只会导致(轻微?)损失——在涉及原始计算的情况下,只有优化器的质量很重要。

于 2011-07-23T08:59:05.120 回答