从windows到linux -- 编程篇 -- cygwin,在win中开发linux程序
从windows到linux -- 编程篇 -- cygwin,在win中开发linux程序
乾坤一笑[smileonce] smileonce@126.com 2004-7-23
版权所有 转载请注明出处 http://blog.csdn.net/smileonce
很多用windows的朋友不习惯于用linux的开发环境。虽然很乐意尝试一下,但是往往怕linux系统打乱了自己的正常生活:1〉装linux系统把windows系统给搞坏了,导致自己无法正常生活;2>linux开发上手太难,写出第一个helloworld不亚于java的难度,环境配置摸不着头脑。对于此,我的看法是:路不管平还是陡,终归你要走的,如果你愿意投入到linux开发的社群中来,不会安装linux系统,不会配置工作环境是不能想象的。(事实上,确实要了解很多东西的原理,不然很难排错:诸如,硬盘引导器的引导原理、分区结构原理及linux分区结构和文件系统、环境变量的设置、种类繁多的压缩包安装包的解压安装方法、用户管理权限管理等常用命令、以至于驱动安装系统中文化等等异常琐碎的东东)。
本文试图跳过这个难走的步骤,启用一个win环境下的linux仿真器(和linux下面的命令行开发环境基本一致),用短短的20分钟的时间,教你做出一个纯正的 linux下gcc编译的helloworld。就象是买点心前先尝尝味道,不也是一件很愉快的事情么?(注:cygwin事实上不仅有此模拟功能,它也是移植unix<-->win程序的一个很有效的工具,也有人用它来做嵌入式系统开发)
一、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
二、cygwin的安装。
cygwin的安装文件很容易通过google找到。目前国内的网站上有“网络安装版”和"本地安装版"两种。标准的发行版应该是 网络安装版。两者并无大不同,下面介绍一下安装的过程。
step1. 下载后,点击安装文件(setup.exe)进行安装,第一个画面是GNU版权说明,点"下一步(N)—>",
进入安装模式选择画面。
step2. 安装模式有"Install from Internet"、"Download form Internet"、
"Install from Local Directory" 三种。"Install form Internet"就是直接从internet上装,适用于网速较快的情况。如果你和我一样网速不是很快,或者说装过之后想把下载的安装文件保存起来,下次不再下载了直接安装,就应该选择"Download form Internet",下载安装的文件(大约40M左右)。
事实上,所谓的"本地安装版",也是别人从网上下载全部文件后打的包(适用于中国国情嘛^_^)
step3. 接下来是选择安装目的路径和安装源文件所在的路径,之后就进入了选择安装包所在的路径。
注意了阿,这里可是重头戏。我第一安装的时候就是没有看清这一步,结果没有把gcc装进去,导致没法编译文件。
+ All Default
+ Admin Default
....
+ Devel Default
+ Editors Default
....
如上图所示,你在这个TreeView的某个节点上双击,就可以改变它的状态,如Default、Install、Uninstall、Reinstall四种状态。默认的都是Default状态,很多工具的默认状态都是不安装。
在这里我选择了在All这一行上后面的Default上点Install,全部安装,以免后患。(注意:这里的树形控件和win下面的不同,你试试点在All上点 和 在All这一行后面的Default上点,会有不同的响应)
step4. 点下一步,安装成功。它会自动在你的桌面上建立一个快捷方式。
好了,下面就开始我的linux旅程了。双击cygwin的快捷方式进入系统。
首先介绍几个简单的linux命令。
pwd 显示当前的路径
cd 改变当前路径,无参数时进入对应用户的home目录
ls 列出当前目录下的文件。此命令有N多参数,比如ls -al
ps 列出当前系统进程
kill 杀死某个进程
mkdir 建立目录
rmdir 删除目录
rm 删除文件
mv 文件改名或目录改名
man 联机帮助
less 显示文件的最末几行
由于linux下面的命令大多都有很多参数,可以组合使用。所以,每当你不会或者记不清楚改用那个参数,那个开关的时候,可以用man来查找,比如,我想查找ls怎么使用,可以键入
$ man ls
系统回显信息如下:
LS(1) FSF LS(1)
NAME
ls - list directory contents
SYNOPSIS
ls [OPTION]... [FILE]...
DESCRIPTION
List information about the FILEs (the current directory by
default). Sort entries alphabetically if none of -cftuSUX
nor --sort.
-a, --all
do not hide entries starting with .
-A, --almost-all
do not list implied . and ..
-b, --escape
print octal escapes for nongraphic characters
--block-size=SIZE
use SIZE-byte blocks
:
很全是吧,嘿嘿。
好了,多说无意,让我们来写一个hello world程序。
# cd
进入了/home/administrator目录,我当前的登陆帐号是administrator
# mkdir source
建立一个叫做source的子目录
# cd source
进入 /home/administrator/source
# vim hello.c
启动vim编辑器,来编写程序。好了,现在有必要简要介绍一下vim。
在linux界,有两大编辑器最有历史。其一是vi,其二是emacs。vi现在已经演化成了vim,比当前的vi更为强大。vim和emacs是两种截然不同的东西,vim强调用简洁的命令来完成功能,无论是查找、替换、
正则表达式匹配、编译、链接、排错、函数间跳转等等等等都在命令行中完成,并且它把方向键也集成在了hjkl四个键之上,可以说,用了vim基本上可以不用鼠标了:p emacs则是在功能强大上做文章,版本控制、模拟多种编辑环境、对文本进行各种操作,可谓之一个强大的文本处理系统。emacs是用诸如Ctrl+ Alt+K 之类的组合键来控制的;vim则是用se(set 的缩写)等简洁命令来控制的。
由于cygwin中只提供了vim(能不能自己装emacs我还没有试过),我们就先体验一下vim吧:p
vim加载文本文件后分为命令模式和插入模式两种。插入模式,顾名思义就是输入编辑文本;命令模式,则是输入各种vim的控制命令,常用的有:
i 进入编辑模式
h 左移
j 下移
k 上移
l 右移
w 存盘
q 退出
! 强调执行
有些命令是可以组合使用的,如果你修改了某个文件,想存盘退出,则可以使用wq;如果你想放弃存盘,直接退出则可以使用q! 好了大家体验一下吧,记住:从编辑模式退回命令模式按"Esc",再按":",在输入指令,从命令模式进入编辑模式用i,初次使用vim肯定很难受,嘿嘿,不过用多了就习惯了,确实很省劲。
我们编辑hello.c文件,输入:
#include
int main(void) {
printf( "Hello World!");
}
然后,输入wq命令退到命令行。
输入编译指令:
# gcc hello.c -o hello
编译成功后可以看一下
# ls
看到hello.exe了吧,嘿嘿。
好,让我们运行看看。
# ./hello
效果如何?不错吧? :)
okey,现在玩一个C++的hello world,
# vim world.cpp
输入:
#include
using namespace std;
void main() {
cout << "Hello World!";
}
编译C++程序要用g++
# g++ world.cpp -o world
运行一下哈,
# ./world
如何,效果不错吧?诸位都是高手,走到这步应该编些简单程序都不成问题了吧:p
好了,关于如何编写makefile文件,如何用gdb下次再说了。
版权声明:CSDN是本Blog托管服务提供商。如本文牵涉版权问题,CSDN不承担相关责任,请版权拥有者直接与文章作者联系解决。
[点击此处收藏本文]
发表于2004年07月23日 3:48 PM
Feedback
# 回复:从windows到linux -- 编程篇 -- cygwin,在win中开发linux程序 2004-07-23 3:58 PM Wenlong Wu
微软也推出了一个模拟UNIX的运行环境,Services for UNIX,类似CYGWIN,产品地址为:http://www.microsoft.com/china/windowsserver2003/sfu/default.mspx
偶最近也在打算写一篇关于CYGWIN和SFU的比较:-)
# 不知道那里有下载?:p 2004-07-23 4:25 PM 一笑
M$的东东该不会是免费的吧:p
# 回复:从windows到linux -- 编程篇 -- cygwin,在win中开发linux程序 2004-07-23 4:29 PM Wenlong Wu
下载地址:http://www.microsoft.com/windows/sfu/downloads/default.asp
刚开始好象要买的,从3.5版开始免费了。
# 回复:从windows到linux -- 编程篇 -- cygwin,在win中开发linux程序 2004-07-26 8:29 PM erictang2003
直接用JAVA 不就OK了?
# 回复:从windows到linux -- 编程篇 -- cygwin,在win中开发linux程序 2004-07-27 8:30 AM cctv
是呀,讲讲linux下怎么用java编程
# 回复:从windows到linux -- 编程篇 -- cygwin,在win中开发linux程序 2004-07-27 9:11 AM java
呵呵。linux下的java编程就是在windows上编号,拷贝到linux上就行了嘛。
# 回复:从windows到linux -- 编程篇 -- cygwin,在win中开发linux程序 2004-07-27 12:44 PM doodoofish
在Linux上Java编程的工具有很多,个人比较喜欢Eclipse。
# 回复:从windows到linux -- 编程篇 -- cygwin,在win中开发linux程序 2004-07-28 12:25 AM bobinet
感谢作者提供这样的佳作!我正在为配制GCC犯愁呢?谢谢你!
# 回复:从windows到linux -- 编程篇 -- cygwin,在win中开发linux程序 2004-07-28 3:27 PM xiaohonghong
安装后,怎么没有vim?
# to xiaohonghong 2004-07-28 6:48 PM 一笑
估计是没装全,看看step3做对了吗?
# 回复:从windows到linux -- 编程篇 -- cygwin,在win中开发linux程序 2004-07-29 3:01 PM NowCan
全部下载好像要300M呢,绝对不是40M。
# to NowCan 2004-07-29 4:25 PM 一笑
网上那个“离线安装版”是40多兆,全部安装后不到300M
如果在线安装,需要下载400M左右,全部安装后1.5G
# 回复:从windows到linux -- 编程篇 -- cygwin,在win中开发linux程序 2004-07-29 4:54 PM archer
恩,我现在遇到个问题,在cygwin下make我的程序,makefile里的SHELL = /bin/sh 提示我找不到/bin/sh,可是我在cygwin窗口能直接运行/bin/sh,为什么啊
# 回复:从windows到linux -- 编程篇 -- cygwin,在win中开发linux程序 2004-07-30 9:18 AM Shyworm
用cygwin太太太落后了!用VMWare吧
# 回复:从windows到linux -- 编程篇 -- cygwin,在win中开发linux程序 2004-07-30 3:49 PM health
太大了,网络安装会安装死人的
# 回复:从windows到linux -- 编程篇 -- cygwin,在win中开发linux程序 2004-07-30 4:49 PM 13121982
我觉得不错
是Free的
很好
# 回复:从windows到linux -- 编程篇 -- cygwin,在win中开发linux程序 2004-07-31 1:52 PM 周星星
很不错呀,我就在用它!very good.
# 回复:从windows到linux -- 编程篇 -- cygwin,在win中开发linux程序 2004-08-02 10:59 AM CTF
还是直接装一个LINUX吧,弄个新的分区,用上2-3G,比什么模拟器之类的强多了。
# 回复:从windows到linux -- 编程篇 -- cygwin,在win中开发linux程序 2004-08-02 11:08 PM ouyang
I can not access http://www.cygwin.com from Wuhan with ADSL. Any body knows what is going on with it? Thanks in advance.
Ouyang
# 回复:从windows到linux -- 编程篇 -- cygwin,在win中开发linux程序 2004-08-04 12:26 PM TigerZhou
# 回复:从windows到linux -- 编程篇 -- cygwin,在win中开发linux程序 2004-08-06 12:32 PM Herbert
谁说 Cygwin 下没有 Emacs?
连 X 都有了
# 回复:从windows到linux -- 编程篇 -- cygwin,在win中开发linux程序 2004-08-06 3:12 PM lantian
OK
# 回复:还不如装个虚拟机啊 2004-08-06 6:16 PM moss
我现在是两台主机加一台显示器跑三个操作系统啊 :)
# 回复:从windows到linux -- 编程篇 -- cygwin,在win中开发linux程序 2004-08-10 12:59 PM jerrylucky
装个虚拟机不好么??
# 回复:从windows到linux -- 编程篇 -- cygwin,在win中开发linux程序 2004-08-10 1:45 PM 大熊
有一个mingw项目,也提供了一个在windows系统中模拟linux的编译环境的方案,也就是标准的:
./configure
make
make install
linux或unix下命令行的编译过程
一些开源软件或库也可以在这个环境下编译,我试过fox和fltk这两个库的编译
不过由于它没有完全模拟posix环境,因此有些source还是不能使用它来编译的,这时只能用cygwin了
# 回复:从windows到linux -- 编程篇 -- cygwin,在win中开发linux程序 2004-08-12 1:29 PM lgj
谢谢
写的很好
谢谢楼主
强烈期待你的下一篇讲makefile的文章
# 回复:从windows到linux -- 编程篇 -- cygwin,在win中开发linux程序 2004-08-19 11:16 AM 雅趣
UNIX是强大的,但是一般用户一时无法接受,模拟器可以完成一些WINDOWS不能完成的事,也是一大好处!
# 回复:从windows到linux -- 编程篇 -- cygwin,在win中开发linux程序 2004-08-21 3:10 PM cnlinuxr
能不能在这样的环境中编写出可在linux环境中执行的程序,如果能,怎样编译?
# 回复:从windows到linux -- 编程篇 -- cygwin,在win中开发linux程序 2004-09-09 2:30 PM 乐观
请教各位大虾,在哪儿下载CYGWIN?谢谢
# 回复:从windows到linux -- 编程篇 -- cygwin,在win中开发linux程序 2004-09-14 10:42 AM xrh99
有没有关于Cygwin使用的中文书籍呢?
# 回复:从windows到linux -- 编程篇 -- cygwin,在win中开发linux程序 2004-10-07 7:46 PM zhaorongbing
输入vim 命令的时候显示bash vim怎么回事
# 回复:从windows到linux -- 编程篇 -- cygwin,在win中开发linux程序 2004-10-08 11:13 PM Windflower
还梦想着自已写一个windows版的bash呢,这下终于能用bash了,windows下的dos命令应该也能做很多事情,可是相关的文章太少了。
感谢作者.
# 回复:从windows到linux -- 编程篇 -- cygwin,在win中开发linux程序 2004-11-14 12:09 AM 笨笨
看了这篇不错的文章后,我马上行动在自己的机器上安装了一个(完全安装),编译c还可以,但是c++就不行了==比如下面的经典代码,就不能编译,不知道为什么!请指点
=========================================
现在玩一个C++的hello world,
# vim world.cpp
输入:
#include <iostream>
using namespace std;
void main() {
cout << "Hello World!";
}
编译C++程序要用g++
# g++ world.cpp -o world
运行一下哈,
# ./world
# 回复:从windows到linux -- 编程篇 -- cygwin,在win中开发linux程序 2004-11-14 12:09 AM 笨笨
看了这篇不错的文章后,我马上行动在自己的机器上安装了一个(完全安装),编译c还可以,但是c++就不行了==比如下面的经典代码,就不能编译,不知道为什么!请指点
=========================================
现在玩一个C++的hello world,
# vim world.cpp
输入:
#include <iostream>
using namespace std;
void main() {
cout << "Hello World!";
}
编译C++程序要用g++
# g++ world.cpp -o world
运行一下哈,
# ./world
# 回复:从windows到linux -- 编程篇 -- cygwin,在win中开发linux程序 2004-11-14 11:51 AM zz
笨笨,楼主的文章没有错呀
用G++可以编译啊
# 回复:从windows到linux -- 编程篇 -- cygwin,在win中开发linux程序 2004-11-14 12:36 PM 笨笨
怎么在我的机器上就不行了呢?怎么回事情?
# 回复:从windows到linux -- 编程篇 -- cygwin,在win中开发linux程序 2004-11-14 12:39 PM 笨笨
怎么在我的机器上就不行呢?
g++ 的语法和一般turbo C++上的语法有什么不同吗?
# 回复:从windows到linux -- 编程篇 -- cygwin,在win中开发linux程序 2004-11-14 12:54 PM 笨笨
哦,现在我将
#include <iostream>
using namespace std;
void main() {
cout << "Hello World!";
}
粘贴到记事本上,然后再在cygwin下rm改文件后缀为.cpp
然后编译就可以了!
为什么原来用vim编辑的就不行了,我很奇怪。于是我就将用vim编辑的文件打开,发现文件里面字符之间有很多小黑块。
因此有一个问题:用vim 编辑和记事本编辑有什么本质上的区别
吗?
# 回复:从windows到linux -- 编程篇 -- cygwin,在win中开发linux程序 2004-11-14 1:27 PM 笨笨
这篇文章是我决定学习linux的开端,原来打算装双操作系统,但是顾虑太多,出了问题旁边也没有人来交流,同时还要重新启动来切换系统,实在不方便。
这篇文章提供的这个免费软件满足了我目前的需要,激发了我学习linux的动力,并且很方便,尽管和真实的linux环境是不一样的,但是给了我熟悉 linux环境的机会,并且不影响我干活。从学习理论上讲,人们学习新的知识总是以自己过去的经验和知识为基础,这样就实现了学习的平稳过渡。
我将这篇文章推荐给了朋友们,他们都很喜欢。这说明技术文章不一定要求很深,大众性的并且带有自己体会性的文章才能流传的广和长久!
# 回复:从windows到linux -- 编程篇 -- cygwin,在win中开发linux程序 2004-11-14 4:39 PM 笨笨
我发现在我的机器下有一目录C:\cygwin\lib\mingw
MinGW:即Minimalist GNU for Windows。也提供了一个在windows系统中模拟linux的编译环境的方案
它怎么出现在cygwin的目录下面呀?
# 回复:从windows到linux -- 编程篇 -- cygwin,在win中开发linux程序 2004-11-15 1:08 PM 笨笨
同时我发现cygwin 怎么不能像tc一样处理图形
$ gcc ball.c -o ball
ball.c:8: graphics.h: No such file or directo
ball.c:10: conio.h: No such file or directory
这个问题该怎么解决呢!
# 回复:从windows到linux -- 编程篇 -- cygwin,在win中开发linux程序 2004-11-15 9:05 PM sm
sm
# 回复:从windows到linux -- 编程篇 -- cygwin,在win中开发linux程序 2004-11-16 8:11 PM 2.427怎么不支持VIM命令啊?
2.427怎么不支持VIM命令啊?
# 回复:从windows到linux -- 编程篇 -- cygwin,在win中开发linux程序 2004-11-16 8:14 PM 大家从日本安装吧,很快的
大家从日本安装吧,很快的
日本最快
台湾最慢
美国其次~
# 回复:从windows到linux -- 编程篇 -- cygwin,在win中开发linux程序 2004-11-16 8:18 PM 可是我也不会全装
全装时候选取什么选项?我的信箱是WTSYX
用的是HOTMAIL.COM的,帮助我啊~~我安NN次了~~,全下了但全装不上~~
# 回复:从windows到linux -- 编程篇 -- cygwin,在win中开发linux程序 2004-12-08 10:52 PM summerrock
写的真好
# 回复:从windows到linux -- 编程篇 -- cygwin,在win中开发linux程序 2004-12-20 1:32 PM bobodong
晕死了,建议大家装一下的djgpp可能写错了,好像是这个,不错的,由个ide界面
# to 笨笨 2004-12-30 9:55 PM 一笑
从你的描述中你没能成功运行的原因我也猜不出来。:)
win文本文件和linux文本文件的区别是: win的换行是回车字符'\r'换行字符'\n';而linux的换行是换行字符'\r'。你编译不出的原因和此无关。
c程序需要扩展名为.c,然后用gcc编译;
c++程序需要扩展名为.cpp,然后用g++编译.
# 回复:从windows到linux -- 编程篇 -- cygwin,在win中开发linux程序 2005-01-13 6:34 PM bytepark
cygwin底下的gcc有一个比较变态的要求,就是cpp文件最后一定要有一个空行才能正常编译