Tuesday, October 07, 2008

Cygwin,gcc的使用

Cygwingcc的使用(一)

很多用windows的朋友不习惯于用linux的开发环境。虽然很乐意尝试一下,但是往往怕linux系统打乱了自己的正常生活:1〉装linux系统把windows系统给搞坏了,导致自己无法正常生活;2>linux开发上手太难,写出第一个helloworld不亚于java的难度,环境配置摸不着头脑。 对于此,我的看法是:路不管平还是陡,终归你要走的,如果你愿意投入到linux开发的社群中来,不会安装linux系统,不会配置工作环境是不能想象的。(事实上,确实要了解很多东西的原理,不然很难排错:诸如,硬盘引导器的引导原理、分区结构原理及linux分区结构和文件系统、环境变量的设置、种类繁多的压缩包安装包的解压安装方法、用户管理权限管理等常用命令、以至于驱动安装系统中文化等等异常琐碎的东东)

本文试图跳过这个难走的步骤,启用一个win环境下的linux仿真器(和linux下面的命令行开发环境基本一致),用短短的20分钟的时间,教你做出一个纯正的linuxgcc编译的helloworld。就象是买点心前先尝尝味道,不也是一件很愉快的事情么?(注:cygwin事实上不仅有此模拟功能,它也是移植unix<-->win程序的一个很有效的工具,也有人用它来做嵌入式系统开发)

一、cygwin是什么?

这个问题你最好google一下"cygwin的历史",或许能够获得更为详尽的答案。简而言之,cygwin是一个在windows平台上运行的linux模拟环境,是cygnus solutions公司开发的自由软件(该公司开发了很多好东西,著名的还有eCos,不过现已被Redhat收购)。插一句废话,很多朋友不明白linuxunix的区别和联系,在此也简要介绍一下。UNIX是一个注册商标,是要满足一大堆条件并且支付可观费用才能够被授权使用的一个操作系统;linuxunix的克隆版本,是由其创始人Linus和诸多世界知名的黑客手工打造的一个操作系统。为什么linuxunix之间有很多软件可以很轻松的移植?因为linux也满足POSIX规范,所以在运行机制上跟unix相近。以下引用网上的一段话用于说明cygwin的工作机制:cygnus当初首先把gccgdbgas等开发工具进行了改进,使他们能够生成并解释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的某个节点上双击,就可以改变它的状态,如DefaultInstallUninstallReinstall四种状态。默认的都是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,其二是emacsvi现在已经演化成了vim,比当前的vi更为强大。vimemacs是两种截然不同的东西,vim强调用简洁的命令来完成功能,无论是查找、替换、正则表达式匹配、编译、链接、排错、函数间跳转等等等等都在命令行中完成,并且它把方向键也集成在了hjkl四个键之上,可以说,用了vim基本上可以不用鼠标了:p emacs则是在功能强大上做文章,版本控制、模拟多种编辑环境、对文本进行各种操作,可谓之一个强大的文本处理系统。emacs是用诸如Ctrl+Alt+K 之类的组合键来控制的;vim则是用se(set 的缩写)等简洁命令来控制的。

由于cygwin中只提供了vim(能不能自己装emacs我还没有试过),我们就先体验一下vim吧。

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

如何,效果不错吧?诸位都是高手,走到这步应该编些简单程序都不成问题了吧。

Thursday, October 02, 2008

7000亿救市,多吗?

2007年各国国民生产总值排名
01----美国132216.85亿美元人均-43995美元
02----日本-49113.62亿美元人均-38533美元
03----德国-28582.34亿美元人均-34679美元
04----中国-26971.64亿美元人均-2052 美元
05----英国-23413.71亿美元人均-38636美元
06----法国-21537.46亿美元人均-35377美元
07---意大利17839.59亿美元人均-30689美元
08---加拿大10889.37亿美元人均-32898美元
09---西班牙10812.29亿美元人均-26763美元
10----印度--7961.43亿美元人均-727美元

印度人民不吃不喝干一年...美国人民0.05年=19天.我说时间怎么过的这么慢呢.

Monday, September 29, 2008

[转]找个什么样的男人当我老公

一下这篇文章用于自我激励和提醒

http://www.byb.cn/doc_123-1.aspx

Sunday, September 28, 2008

发泄一下

刚和家里打完电话,心情不好。想起来好久没有写东西了,上来发泄一下,唉~心老了,也懒得写了。

这一年来发生了许许多多的事情,倦了~
两天前看见jack,被他磕了,疼得我一天都没怎么说话。(真没出息,唉~)

但愿人人都能实现自己的梦想,人人有屋住,人人有饭吃,一切都好~

不说废话了,转一篇文章吧:

【原创】以前 vs 将来 [ bigc ] 于:2008-06-04 03:54:49
有一对堪称神仙眷侣的夫妇。自从他们俩遇见后,
就不可收拾地坠入爱河,从此像两颗糖果一样粘在了一起。可是过了两年,那个女孩来找心理医生,诉说自己的不安。

“我该怎么办,我们这样在一起,真是太没有出息了。”

大夫问“你们这样不快乐吗?”

“就是因为太快乐了,所以糊里糊涂一下就过了两年,完全不思上进。遇见他之前,我本来为了升职,准备去年考在职研究生的,结果没去,他也没有按原计划出国深造。我们甚至都没有开始攒钱买房子。”

大夫又问“为什么要这些“上进”呢?”

“为了将来啊,我们可以生活得更幸福。”

“让我来给你讲两个故事吧。”大夫说道

第一个故事是关于“以前”的。有一个中年男人,深深地爱上了一个女孩。可是,他有过非常不愉快的婚姻,而且纠缠了整整十年,好不容易离婚了以后,他作出了一个决定,再也不结婚了。

尽管这个男人是如此爱这个女孩,他还是不能忘记以前的痛,不敢重新走进伤害过他的婚姻之门。结果,他选择放弃了这个女孩,继续他单身的生活。他就这样一直生活在“以前”,直到又过了二十年,他忽然发觉,自己其实是为了之前的十年,放弃了之后的二十年,而那比“以前”更长的时光中,有无穷美与好的可能性,现在也一样变成了以前。

第二个故事是关于“将来”。有一对很相爱的夫妇,睡在一张简陋的小床上,她枕着他的胳膊,麻了,他忍着,因为不忍心吵醒她,他的腿搁在她的腿上,压痛了,她一动不动。有一天早上,他们相亲相爱地醒来,忽然想,如果有一栋海边的大房子该多好,如果这样,生活应该会更幸福吧。

于是像很多为了将来打拼的夫妇一样,她的心思全放在了事业上,家里变得凌乱不堪;他在外面做事不顺利,回家免不了脾气暴躁。后来,他有了一个到其他国家发展的机会,一去就是五年。她很是寂寞,就与一个同事有了暧昧的关系。

好在婚姻即便这样跌跌撞撞,也维持了三十年。直到两人白发苍苍,银行的存款真的足够去买一栋海边的大房子了,他们却早已不睡在同一张床上。他们为了一个所谓的“将来”,磨折了自己三十年,这本来可以很幸福的三十年。

“当你觉得快乐的时候,”大夫最后说,“你已经忘记了以前和将来,何必再去想起。在从生到死这个无稽的过程中,我们只活一天,若这一天有爱,那便已是永远。”

在我看来,这不仅只是两个故事而已,我们哪个人不是这样荒唐地在生活着,在“以前”的经验中趑趄不前,并同时为着一个莫名其妙的“将来”,诸如五年后的职称、十年后的年假、二十年后的退休计划,三十年后的环球旅行,而说服自己要选择一个默默忍受的现在。活在以前和将来的人,即便眼下就是唾手可得的幸福,他们也不会安然捧起,他们会把这幸福延迟到“将来”才觉得安全,或者让“以前”来质疑这幸福。

人的快乐,都是自己推倒的。



以上
昨天上的java,老师的一个故事让我感动良久。我知道自己是个stubborn的人。。。。。(但是就是hate sunnyvale这个城市的娱乐场所)
庸人自扰吧,写了这么多心情平和了不少。

I believe time is my critical,只希望老爸老妈身体健康!!!

安啦
Frank~