我目前正在编译一个随makefile文件提供的开源优化库(本机C ++),以便与gcc一起使用。由于我是Windows用户,我很好奇我在编译时遇到的两个选项,使用gcc与MinGW / Cygwin或手动构建Visual Studio项目并编译源代码。
1)如果我使用MinGW / Cygwin + gcc进行编译,生成的.lib(静态库)是否需要MinGW / Cygwin中的任何库?即我可以将编译后的.lib分发给没有MinGW / Cygwin的Windows PC吗?它还能运行吗?
2)除了编译器本身之间的性能差异之外,使用MinGW / Cygwin和gcc进行编译时是否存在相关的开销 - 就像仿真层被编译到库中一样,或者gcc是否构建了本机Windows库? / p>
3)如果速度是我库的主要目标,哪种方法最好?我意识到这是非常开放的,我可能最好运行自己的基准测试,但如果有人有经验,那就太棒了!
答案 0 :(得分:5)
Cygwin的重点是Linux仿真层,默认情况下(即如果你不进行交叉编译),二进制文件需要运行cygwin1.dll
。
MinGW不是这种情况,它将二进制文件创建为来自MSVC的二进制文件。但是,MinGW自带一组运行时库,特别是libstdc++-6.dll
。也可以使用-static-libstdc++
静态链接此库,在这种情况下,您可能还希望使用-static-libgcc
进行编译。
这并不意味着您可以自由地混合来自不同编译器的C ++库(请参阅mingw.org上的this page)。如果您不想将自己限制在库的extern "C"
接口,那么您很可能必须选择一个编译器并坚持使用它。
关于你的性能问题:使用Cygwin只会在实际与操作系统交互时导致(次要?)惩罚 - 在原始计算方面,只有优化器的质量很重要。