Cygwin gcc 的使用(一)

   很多用 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 相近。以下引用网上的一段话用于说明 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 吧。

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

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

编译文件生成.exe  原来加上了./ 
GitHub 加速计划 / li / linux-dash
6
1
下载
A beautiful web dashboard for Linux
最近提交(Master分支:3 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐