我想将我在Linux上使用的一些应用程序移植到Windows。特别是我一直致力于wdiff。一个程序,用于逐个比较两个文件的差异。
目前我已经能够通过Cygwin在Windows上成功编译程序。但是,我想在Windows上本地运行程序,类似于项目:UnixUtils。
我如何在Windows环境中移植unix实用程序?
我可能会猜测手动创建./configure文件,以便我可以创建一个正确的makefile。我是在正确的轨道上吗?有没有人有将GNU软件移植到Windows的经验?
我在Code :: Blocks上编译了它,我得到两个错误:
wdiff.c | 226 |错误:`SIGPIPE' 未申报(首先在此使用 功能)
readpipe.c:71:未定义引用`_pipe'
readpipe.c:74:未定义对`_fork
这是windows不支持的linux信号... equvilancy?
这是在configure.in文件中...硬编码可能是最快的解决方案......
结果:
MSYS负责配置问题,但MinGW无法解决posix问题。我尝试按照mrjoltcola的建议使用pthreads。但是,几个小时后,我无法使用提供的库进行编译或链接。我认为如果这有效,那将是我追求的解决方案。 特别提到Michael Madsen的MSYS。
答案 0 :(得分:3)
是。如果您坚持使用标准C库和POSIX功能,则大多数都可以在Windows上使用。您可能只需要找到实现。有些东西的实现不需要Cywgin或MinGW(比如pthreads包等)。
此外,还有一本很好的书,以W. Richard Steven在UNIX环境中的高级编程的风格编写,本书是 Windows系统编程 ,作者Johnson Hart。他有第4版。它侧重于系统编程,没有任何GUI处理。
http://www.amazon.com/Windows-Programming-Addison-Wesley-Microsoft-Technology/dp/0321657748
对于迁移到Windows的UNIX编程而言,这是我所知道的最好的书。
答案 1 :(得分:2)
您可以查看与cygwin类似的MinGW(和MSYS),但gcc会生成本机Windows可执行文件。但是,由于Unix模拟不如cygwin好,您可能需要调整代码。
答案 2 :(得分:0)
即使在移植应用程序时也始终尝试遵循标准。 Windows / Linux上存在POSIX兼容的编译器。你可以尝试mingw。它具有构建标准POSIX应用程序(GNU Linux)所需的完整工具链。查看Dev-Cpp,它可以简化工作。
答案 3 :(得分:0)
MinGW是在Windows PC上获取gcc和相关二进制实用程序(包括gdb)的最简单方法。它包括头文件和导入库,以便您可以调用本机Windows API。如果您想要更多集成的IDE开发环境,可以下载Microsoft的免费Visual Studio Express C++。
无论哪种方式,您都可能需要将某些函数调用转换为使用Windows特定的API(如果您想要一本书,我还会推荐在mrjoltcola的答案中提到的Hart书)。对于简单的命令行工具,这种转换通常不是什么大问题,大型移植噩梦倾向于涉及具有GUI的工具,这些GUI具有对操作系统提供的GUI框架的深度嵌入依赖性。