Cygwin使用
对于经常在Windows编程的使用者,想体验*nix编程可以选择vw,vpc,双系统,而对于真正的开发者而言一个*nix shell加上GCC GDB MAKE以及相关的函数库文件足以,哦,也许加上DEVDOC才算完整,也就是可以使用man,所有这些cygwin完全可以搞定。
cygwin简介:
这个问题你最好google一下"cygwin的历史",或许能够获得更为详尽的答案。简而言之,cygwin是一个在windows平台上运行的 linux模拟环境,是cygnus solutions公司开发的自由软件(该公司开发了很多好东西,著名的还有eCos,不过现已被Redhat收购)。插一句废话,很多朋友不明白 linux和unix的区别和联系,在此也简要介绍一下。UNIX是一个注册商标,是要满足一大堆条件并且支付可观费用才能够被授权使用的一个操作系统; linux是unix的克隆版本,是由其创始人Linus和诸多世界知名的黑客手工打造的一个操作系统。为什么linux和unix之间有很多软件可以很轻松的移植?因为linux也满足POSIX规范,所以在运行机制上跟unix相近。
以下引用网上的一段话(出处:http://blog.csdn.net/glock18/archive/2004/07/10/38275.aspx),
用于说明cygwin的工作机制:cygnus当初首先把gcc,gdb,gas等开发工具进行了改进,使他们能够生成并解释win32的目标文件。然后,他们要把这些工具移植到windows平台上去。一种方案是基于win32 api对这些工具的源代码进行大幅修改,这样做显然需要大量工作。因此,他们采取了一种不同的方法——他们写了一个共享库(就是cygwin dll),把win32 api中没有的unix风格的调用(如fork,spawn,signals,select,sockets等)封装在里面,也就是说,他们基于 win32 api写了一个unix系统库的模拟层。这样,只要把这些工具的源代码和这个共享库连接到一起,就可以使用unix主机上的交叉编译器来生成可以在 windows平台上运行的工具集。以这些移植到windows平台上的开发工具为基础,cygnus又逐步把其他的工具(几乎不需要对源代码进行修改,只需要修改他们的配置脚本)软件移植到windows上来。这样,在windows平台上运行bash和开发工具、用户工具,感觉好像在unix上工作。关于cygwin实现的更详细描述,请参考http://cygwin.com/cygwin-ug-net/highlights.html
那么接下来就安装:
1. 先去Cygwin网站(www.cygwin.com)下载一个安装文件(setup.exe),这个文件体积很小,只有不到300KB。然后双击运行setup.exe。因为是第一次安装,所以必须选择从Internet在线安装,也可以先从Internet下载安装文件,然后再手动安装。我选择后者,因为这样,以后我可以在不联网的时候也能安装。
2. 接下来点击“下一步”,然后从一系列服务器列表中选择一个你认为网速最快的一个作为下载服务器。接着点击“下一步”就会出现如下图所示的界面,用来选择你想安装的程序。
如果你不做任何修改,将默认安装Cygwin运行所需的最少的程序和组件。不过,gcc编译器不在默认安装程序之列,所以你必须选择安装gcc。具体是, 在上述窗口中的列表中展开Devel目录,找到gcc-g++一项,点击“Default”,它就变成了“Install”,同时由于程序之间的依赖性 gcc-core条目的“Default”,也变成了“Install”。
此外,为了使gcc能正确编译源文件,还必须安装win32api库,否则会编译出错。因此,你需要在上述窗口中展开Libs目录,找到win32api一项,将它点成“Install”。
4. 安装完成后,运行Cygwin。在窗口中敲入gcc就可以直接用gcc来编译了。编译链接生成的可执行文件,系统会自动加上.exe后缀,在Cygwin 环境中可以直接运行。但如果脱离Cygwin环境,而在MS DOS下运行,则会出错。解决办法很简单,那就是将cygwin1.dll文件拷贝到C:/WINDOWS目录下即可。
在这里我想强调,如果图省事,完全可以直接将all右边的default设为install。但是这将这样你4个G的空间,所以如果你不是拥有特别大的空间的话,还是建议选择性的安装,需要什么可以随时点击先前的setup.exe加装新的组件除去以上所说的组件外,在devel下的GDB和make相信也是大多数开发者所必须的。
至此已将解决的了文章开头提及的前三项要件,而第四项man则是cygwin默认安装的,不过不是很全面,所以可以通过The Linux Documentation Project (很好很强大的文档网站)来解决,不过貌似这个网站大陆打不开,反正我是没打开,还好有香港同胞建立的mirror,比较好用的是ftp://ftp.hkmirror.org/pub/ldp/manpages/,在其中找到适合你的man版本,下载,解压到$(cygwin)目录下的/usr/share/man/下面,编辑/usr/share/misc/man.conf,文件末尾加上MANPATH /usr/share/man/man-pages-*.**即可。
好啦,如下配置后,启动cygwin,来编一个小程序helloworld热热身
随便选一个目录建立helloworld.cc文件,记事本打开,写入以下代码:
#include "stdio.h"
int
main(int args,char* argv[])
{
printf("helloworld");
return 0;
}
保存,启动cygwin cd到helloworld.cc文件目录,执行
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
Appendix
pwd 显示当前的路径
cd 改变当前路径,无参数时进入对应用户的home目录
ls 列出当前目录下的文件。此命令有N多参数,比如ls -al
ps 列出当前系统进程
kill 杀死某个进程
mkdir 建立目录
rmdir 删除目录
rm 删除文件
mv 文件改名或目录改名
man 联机帮助
less 显示文件的最末几行
df 显示文件系统