这篇文章主要介绍的是如何在windows下构建可以跨平台的C语言程序的问题,作者提供了四种可以选择的方法,并指出每种方法的特点和存在的缺陷。

由于在windows下只支持通过Visual C++进行C/C++的开发,所以要实现跨平台的应用有很大的麻烦。最大的一个问题是windows的C函数库被规定为只能接受Uicode(UTF-16)或者ANSI字符串。所以一般的windo函数会提供两个版本,funcW()和funcA(),分别对应两种字符集,但其实funcA最终也是将ANSI字符串先转换为Unicode。

四种构建的方法:

1、Mingw-w64

mingw是gcc在windows的移植版本,可以使用很多gcc的特性,以及C11的所有核心语言特性。使用Mingw,建议在cywin环境下使用,因为它提供了一个完整的POSIX线程环境。
Mingw有个最大的缺陷。windows不支持标准的C语言库。mingw-w64只能以msvcrt.dll来代替,但它并不是被MS官方支持的,只不过碰巧遗留在windows的安装中。所以只能支持C89的标准,C99和C11都无法支持。

2、Visual C++

Visual C++的编译器和构建工具可以独立于整个IDE使用。在执行构建前先执行vcvars64.bat加载环境变量,就可以使用编译器(cl.exe),链接器(link.exe),汇编器(ml64.exe),反汇编(dumpbin.exe),还有一个make工具nmake.exe。
不足之处:需要用好长时间去安装并不需要的Visual Stdio环境。另外,MS只关注C++,对于C99,MS还没考虑支持。另外,makefile的语法也与一般unix环境下的不一致。debug也是个问题,Visual C++输出的是.pdb的带调试信息文件,无法被gdb识别,而且除了IDE环境,也没有一个独立的调试工具。

3、CLang

CLang类似mingw,被移植到windows下,它直接依赖于windows的SDK,所以首先要安装Visual C++的构建工具集。所以CLang无法做到可移植,但可以生成gdb友好的调试信息,理论上可以使用gdb进行调试。

4、Pelles C

 免费但不开源,是一个完整的IDE,包括了调试器和命令行工具。具有自己的C函数库,支持win32 SDK。Pelles C只能在windows下使用,不具有可移植性,且调试信息也不支持GDB。Pelles C使用的是自己的编译器,代码的性能比其他的工具都差一些。