Cygwin的安装配置
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Cygwin的安装配置
Cygwin的安装比较简单,步骤如下:
1.先从官方网站或其它镜像网站下载一个Cygwin的网络安装程序,通常叫:setup.exe,文件很小。
2.运行下载到本地的Cygwin网络安装程序,它会以导航方式来帮你下载/安装Cygwin中的软件,在导航
页的第一页会显示这个安装程序的版本号。
3.接下来,安装程序有3个安装方式的选择:
∙Install from Internet:此为先从网上下载Cygwin软件包,再安装。
这些软件包在安装后仍保留,不删除,为了以后再次使用。
如果你第一次使用Cygwin,之前没有下载过Cygwin的软件包,就使用这个安装方式,安装完之后,下次安装(比如:重装系统后、或在其它机器上安装)时,就可以使用这些已下载的安装包。
∙Download Without Installing:此为只从网上下载Cygwin软件包,但不安装。
∙Install from Local Directory:此为使用本地目录中已下载的Cygwin软件包来安装软件。
4.选择Cygwin的安装路径,这个路径也是Cygwin安装完成后,它所模拟的Linux环境的根目录(Root
Directory)。
5.选择Cygwin软件包的下载保存路径,安装完后,可以备份这个路径下的软件包,以备下次安装。
6.指定从哪个Cygwin的镜像站点下载软件包,选择一个速度最快的地址。
在中国,这个镜像站
点的速度还可以,如果列表中没有的地址,可以手动加入地址:
/pub/,然后选择它。
7.选择需要下载/安装的软件包。
点击软件包选择界面上的View按钮,可以以:软件包分类、全部软件包、最新软件包、没有安装的软件包等方式显示软件包列表。
在Search后的可以键入想要下载/安装的软件包名字,然后再从软件包列表中选择。
有4个对软件包版本下载/安装的全局设置:
∙Keep:表示保持已安装的软件包的版本不变。
∙Prev:表示安装上一个稳定版本的软件包。
∙Curr:表示安装当前稳定版本的软件包,通常使用这个设置。
∙Exp:表示安装最新的实验性版本的软件包。
上面4个是全局默认设置,再选择每个单独的软件包后,还可以设置该软件包特定的安装版本(覆盖全局默认设置):点击一个软件包中的New字段,此软件包就会在:Keep、可用的版本号、
Uninstall、Reinstall、Skip之间切换。
还可以选择软件包中的Src和Bin字段,指定是否安装该软
件包的源码,或者已编译好的程序。
8.最后就是Cygwin的软件包下载/安装过程了。
如果你选择的软件包出现了依赖问题,即选择的软件包依
赖另一个软件包来工作,但那个软件包却没有被选择,这时Cygwin安装程序还会提示你:Unmet Dependencies Found,并显示引起依赖问题的相关软件包,还有一个:Intall these packages to meet dependencies选项,选择后就可以帮你自动下载/安装依赖的软件包。
Cygwin的安装程序真的很方便、智能,让我感觉有点像Debian系Linux的Dpkg/Apt软件包管理系统。
还有一种安装Cygwin的方法,就是用简单的“拷贝”Cygwin安装目录的方法,这通常用在对于已配置好的Cygwin系统,复制到别的机器的情况。
注意:在拷贝完Cygwin安装目录后还不能马上使用,需要修改注册表,主要是设置Cygwin模拟的Linux环境的目录到Windows路径的映射关系:在HKLM\SOFTWARE\Cygnus Solutions键下,参照以下.reg文件修改注册表:
[HKEY_LOCAL_MACHINE\SOFTWARE\Cygnus Solutions]
[HKEY_LOCAL_MACHINE\SOFTWARE\Cygnus Solutions\Cygwin]
[HKEY_LOCAL_MACHINE\SOFTWARE\Cygnus Solutions\Cygwin\mounts v2]
;; 将"/"映射到"C:\cygwin"路径
[HKEY_LOCAL_MACHINE\SOFTWARE\Cygnus Solutions\Cygwin\mounts v2\/]
"native"="C:\\cygwin"
"flags"=dword:0000000a
;; 将"/usr/bin"映射到"C:\cygwin\bin"路径
[HKEY_LOCAL_MACHINE\SOFTWARE\Cygnus Solutions\Cygwin\mounts v2\/usr/bin]
"native"="C:\\cygwin\\bin"
"flags"=dword:0000000a
[HKEY_LOCAL_MACHINE\SOFTWARE\Cygnus Solutions\Cygwin\Program Options]
上面设置后,就可以在Cygwin的Shell环境中使用mount命令查看效果。
更新:
后来我使用新版本的Cygwin环境(Cygwin网络安装程序2.674)时,注册表中保存Cygwin设置的子键名也变成了:HKLM\SOFTWARE\Cygwin。
对于Cygwin的配置,大部分就是对Linux环境的配置,如果你对Linux环境熟悉的话,经验、知识基本上都能复用。
这就是Cygwin的优点:它对Linux环境的模拟是很到位的,大多数移植应用的特征、风格也和Linux下原版的相同,我Linux下的bash、tcl、awk等脚本拿到Cygwin下基本都能用。
因此,Unix/Linux下的一些大块头的软件也以Cygwin的方式移植到Windows下:
∙Cygwin上的X Window实现
∙Cygwin上的KDE桌面环境/库
∙Cygwin上的Gnome桌面环境/库
Windows下搭建开发跨平台GUI程序环境
----Cygwin、MinGW、Eclipse、wxWidgets 最近使用Eclipse搭建了一个开发跨平台GUI程序的环境,其实是将一些开发包、开发库拼在一起使用,它们相互之间没有什么紧密的联系,不过这样也保留了它们自有的特点。
下面首先说明一下这个开发环境中,几个组成部分的特点,这也表明了我为什么选择并组合使用它们的原因。
随后在后续文章中逐步说明搭建这个环境的步骤。
Cygwin
这个项目的名字来源于:GNU、Cygnus、Windows,3者的缩写。
Cygwin的目标是:构建一套Windows 下的Linux模拟环境。
因此,Cygwin是一个庞大的项目,不只包括Linux下的开发环境,也包括工作环境,和各种各样的Linux下的软件。
在早期,Cygwin的核心是cygwin1.dll,可以认为它是一个POSIX界面的实现,依靠这个动态链接库,Unix/Linux下的软件可以很容易的移植到Windows下,并且风格保持原有的不变。
不过随着Cygwin的发展,越来越多的Unix/Linux程序的移植,建立基于Cygwin的复杂程序依赖的库也越来越多,现在装完默认配置的Cygwin后,就会发现有很多cyg打头的动态链接库。
目前Cygwin由RedHat维护和支持。
在版权上,由于Cygwin不是一个软件,而是由成百上千的软件堆砌起来的系统,里面有商业软件的成分/概念,所以它的许可证有开源性质的(GPL)和商业性质的(从RedHat购买)两种。
MinGW
这个项目的名字来源于:Minimalist GNU for Windows的缩写。
最初,MinGW的目标定位为:Windows下的开源的开发环境。
它包括一系列软件:编译工具、链接工具、转储工具、调试工具、和其它开发工具等。
另一方面,MinGW还提供一些开源的基础支持库,像GNU的C/C++ RT库(libc、libstdc++),POSIX的基本调用界面(包括pthread),甚至还有OpenGL 和Windows API的调用接口等。
几乎所有MinGW中的软件都是从GNU项目或Linux下移植到Windows 下的。
后来MinGW有了一个子项目叫:MSYS,其中包括了更多的Linux工具,其目标类似Cygwin:构建一套Windows下的Linux模拟环境。
总之,MinGW中的东西很杂,和Cygwin之间有相当一部分是重复的(目前,Cygwin项目中已经集成MinGW了)。
但MinGW和Cygwin的实现思路和设计思想是不同的:
1. Cygwin通过一个中间层的动态链接库,将位于下层的Windows API,和位于上层的使用POSIX
界面的应用连接起来,好处是应用在Linux与Windows之间移植更加方便,风格更加一致;缺点是发布应用时一定要带上Cygwin的环境动态库,应用执行效率也略微有点低。
2. MinGW在基础支持库层次,使用静态链接的方式,这样生成的应用更加地本地化,应用执行效率
也稍高一些。
所以MinGW声明:基于MinGW开发的应用,不需要依赖任何第三方的C/C++ RT 动态链接库,仅依赖Windows自身的运行环境:
MinGW provides a complete Open Source programming tool set which is suitable for the
development of native MS-Windows applications, and which do not depend on any 3rd-party
C-Runtime DLLs.
不过上面的结论不是绝对的,比如:
∙当你使用MinGW GCC的-mthreads选项(和线程安全异常处理有关)时,就会动态链接到mingwm10.dll。
∙还有如果你使用MinGW GCC 4.4.0默认选项编译C++程序,就会动态链接到libgcc_s_dw2-1.dll,参考下面:
Dynamic linking with libgcc_s_dw2-1.dll is necessary to throw exceptions between
different modules, such as between two DLLs or a DLL and an EXE. Consequently, it is
the default for all languages other than C. To disable this dynamic linking, use
-static-libgcc. To enable this dynamic linking in C, use -shared-libgcc.
MinGW的POSIX界面远没有Cygwin实现的那么全面(比如:连BSD/Linux Socket都没有,只能用Winsock),所以看起来MinGW只是用来开发Windows专属应用的工具集。
在版权上,MinGW比Cygwin更开放些。
我用过MSYS和Cygwin之后,发现MSYS相比Cygwin还有很多不足:
1. MSYS中的工具更像是Unix/Linux下的工具在Windows下的移植版,其中有些工具可以支持
Windows的一些特征(比如:目录分隔用"\"),而有些并没有Unix/Linux下原始的版本那么好用(比如:bash、sed等)。
而Cygwin是努力在Windows下构建一套完全参照Unix/Linux体验的环境。
2. MSYS中的工具很杂,和MinGW中的工具交织在一起(有时,开发工具和实用程序的界限并不是
很截然,况且经常要配合使用),组织很松散,还有一些爱好者自己提供软件包。
如此,搭建基于MSYS的Unix/Linux环境变得稍繁琐,你需要更加谨慎地考虑软件包的依赖关系。
而使用Cygwin 就方便多了,它的安装程序会归类显示软件包的组织关系,还能一定程度上帮你解决软件包的依赖关系。
3.
最后我选择了下面这种方式搭建Windows下的Unix/Linux开发环境:
1. 使用Cygwin的Unix/Linux工作环境,比如:bash、tar、awk、sed、od、man等。
2. 使用MinGW的C/C++开发工具,比如:binutils、gcc、gdb、make、strip等;使用MinGW的基
础支持库,比如:GNU的libc、libstdc++、POSIX的基本调用界面等。
3. 根据需要,使用额外的支持/开发库,比如:pthread、openssl、libiconv、gettext、boost、wxWidgets
等。
注意:
1. 有些支持/开发库可以在MinGW项目的Sourceforge下载地址找到,像pthread(mingw gcc-4.4
中包含)、openssl、libiconv、gettext等。
也可以从这些库官方的项目地址,或其它的Windows 移植版项目地址下载,总之,它们之间的联系比较松散。
2. 如果有一些程序,在MinGW和Cygwin安装后有重复,可以用各种技巧设定它们被选择的优先级,
比如:设置PATH环境变量中的搜索目录顺序,建立符号链接等方法。
Eclipse
开源的IDE环境,本身用Java实现,但绝不是只能作为Java的IDE,它有着丰富的扩展,当使用CDT后,Eclipse就成为强大的C/C++ IDE。
Eclipse-CDT的源程序符号检索功能很强大,是我见过的最准确、最方便的C/C++符号检索功能,比SourceInsight、VC内置的Intellisense、VC的Visual Assist X 插件都强大,比Emacs的CEDET模式中的Semantic的配置更方便。
无论多么复杂的C/C++语法和工程配置管理,Eclipse-CDT都可以为你生成“当前工程的当前配置项”下的源程序符号索引数据库,帮你可以方便的查看/编辑源代码。
不像SourceInsight和Visual Assist X,它们在解析像MFC那种“宏套宏”的奇怪语法时,或者在工程依赖、多配置项等复杂配置管理下就力不从心了。
当然,Eclipse-CDT这种准确的符号检索功能是以“花费更长时间来生成索引数据库”为代价的:我为wxWidgets-2.8.10库工程建立源程序索引就用了1分钟左右,建立的索引数据库文件(.pdom)大小在35MB以上。
当你频繁的在一个大工程的多个配置项之间切换时,这种速度慢的感觉就会更明显。
不过一般来说,花费时间来建立准确的源程序索引数据库是值得的。
wxWidgets
开源的C++支持库,GUI开发支持是其重点,但不局限于此:也包括很多基础性的功能支持,像字符串、locale机制、Socket等。
wxWidgets库的架构风格很像微软的MFC,并且都是包罗万象型的类库,适合熟悉MFC的开发者转型。
支撑wxWidgets的下层运行环境/库有多种选择:Windows API、GTK、Motif、MacOS、X11、MGL等,所以wxWidgets应用可以很容易的移植到多种系统平台上。
只要有可能,wxWidgets总是优先使用本地平台/库的API来实现其自身界面,这样保证了界面绘制的效率,例如:在Windows下,wxWidgets和MFC相似,通过调用Windows API来绘制窗口。
但wxWidgets也有一个wxUniversal版本,是自己绘制界面元素的。
wxWidgets库也有其它语言的调用界面,例如:Python、Perl、Ruby等。
这里有一些wxWidgets的入门参考:
∙官方Wiki中关于wxWidgets和其它库的对比:WxWidgets Compared To Other Toolkits FinderCheng对上面文章的中文翻译:部分1,部分2
∙官方Wiki中对可用于wxWidgets应用开发的IDE列举:List of Integrated Development Environments
∙官方Wiki中对可用于wxWidgets应用开发的工具介绍:Tools。