所以,我有一个完全基于Unix(SPARC Solaris)构build的大型C项目。 我和其他几个人已经开始重新审视它,因为他们对windows的构build感兴趣。
我们都没有做过这样的项目,所以对于初学者来说,有人从unix移植到windows,也许可以给我一些指点或者他们是如何做到的。
我们的计划的第一步是决定编译器/开发环境。
看来我们的select是MS Visual Studio,Cygwin,mingw / gcc和Windows Services for UNIX(SFU)。
我们的时间表相当短,所以我们希望尽可能less地重写代码。
所以,决定一个编译器。
另一个问题是代码确实使用POSIX线程命令(pthread等)
我们宁愿本地编译,而不是在可执行文件和操作系统之间使用某种types的层。 不幸的是在我们的代码中的pthread调用,这可能是不可能的。
我相信Cygwin和SFU都是这么做的。 Cygwin有一个.dll必须包含在编译的代码才能工作。 我不确定关于SFU,任何有关的信息将不胜感激。 看来这将是一个不错的select,但它的开发是为了让UNIX编译软件能够在带有SFU的Windows机器上运行,而不是任何旧的Windows机器。
mingw确实有能力创build本地exes,但缺乏POSIX支持。
那么,在这种情况下,任何人都可以给我任何关于这些编译器的更多信息,build议和知识。 或任何他们与这类事情的经验,这是不胜感激。
短时间表? CygWin,简单而简单。
尽管您不希望使用图层,但这将提供最快的路径,而且您似乎并未指出时间范围要求是灵活的。
我们使用CygWin将命令行和基于X的UNIX程序都移植到了Windows,而且麻烦很少。
Cygwin可能是工作可执行文件的最快路径。 但是它会给你留下一些有趣的分配选择。 最明显的是,cygwin.dll成为一个依赖项。 其许可的GPL,除非您付钱购买商业使用权。
Cygwin对于一个普通的Windows用户并不是特别的友好。 它的目标是在Windows上提供完整的POSIX体验,提供一个shell,所有熟悉的* nix实用程序,甚至一个X端口。但是,它也将Windows磁盘驱动器的命名重新映射到类似POSIX的文件系统。 我从来没有试图将为Cygwin构建的应用程序分发给尚未完整安装Cygwin的机器。 我会注意到,据我所知,没有一个Windows着名的开源应用程序是基于Cygwin的。
如果你有唯一的POSIX依赖关系是pthreads,那么这是可以解决的。 本地Windows线程上建立了一个pthreads端口,可以很好地与MinGW配合使用。 IIRC,它甚至与MinGW一起分发,或者至少是它们的核心支持包之一。
如果文件名的其他处理大部分是不透明的字符串,则可能甚至不需要关心更改/
到\
。 Windows API通常乐于将字符作为路径分隔符,甚至以相同的名字混合使用。 这是使用/
for命令行选项的CMD.EXE和早期DOS惯例,它们禁止在命令提示符下使用/
作为路径名,而不是基础Windows API。
对于可能简化构建过程的工具,请查看MinGW的MSYS组件。 它从Cygwin环境中提供了一个轻量级的fork,在这个环境中有足够的* nix工具可用来运行./configure
和类似的进程。
另外, GnuWin32项目还有大量实用程序和库的端口,这些实用程序和库都是作为本机Windows应用程序运行的,没有异常的依赖关系。
如果代码(至少大部分)是可移植的并且唯一的主要问题是使用pthread,则可能需要使用Pthreads Win32库。 虽然不完整,但它足够完整和准确地处理大多数我尝试过的pthread代码。 虽然通常构建为DLL,但也可以将其构建为静态库,以避免在可执行文件中创建额外的依赖关系。
当然,这一切都会让所有的东西都移植到你的端口 – 但是你还没有足够的猜测是否在你的时间框架内移植其他东西是否合理。