从windows到linux -- 编程篇 -- cygwin,在win中开发linux程序

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

从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下次再说了。

 

GCC与G的区别和联系 总结起来,GCC是一套广泛使用的编译器集合,而G是其中专门用于编译GNU C代码的一个组件。GCC是一个由GNU项目开发的编译器集合,它支持多种编程语言,包括C、C++、Objective-C、Fortran、Ada和其他一些语言。GCC(GNU Compiler Collection)是一套广泛使用的编译器集合,而G代表GNU编译器套件中的一个特定编译器。GCC是一个多语言编译器集合,可用于编译多种编程语言,而G则是GCC中的一个组件,专门用于编译GNU C代码。选项指定使用GNU C编译器的版本。 阅读详情

相关推荐

《Mule in Action》第二版全章节可运行集成示例工程(Mule 3.x)

包含从chapter01到chapter14及appendixD的完整配套源码,每个章节独立为一个标准Maven模块,内置可直接运行的Mule流配置(位于flows目录)、mule-project.xml项目定义、JMeter测试脚本支持、Travis CI构建配置(.travis.yml)和规范LICENSE.md。所有工程基于Mule ESB 3.x开发,适配主流IDE(如Studio、IntelliJ、Eclipse),导入即调、改即测。覆盖企业集成核心能力:消息路由、数据换(DataWeave基础

alice7model的博客 227

Cygwin下VI命令使用-修改文件

vi编辑器是所有UnixLinux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令。由于对UnixLinux系统的任何版本,vi编辑器是完全相同的,因此您可以在其他任何介绍vi的地方进一步了解它。Vi也是Linux中最基本的文本编辑器,学会它后,您将在Linux的世界里畅行无阻。 1、vi的基本概念   基本上vi可以分为三种状态,

huanongjingchao的专栏 1万+

cc、gcc、g++、CC的区别概括

gcc是C编译器;g++是C++编译器;linux下cc一般是一个符号连接,指向gcc;gcc和g++都是GUN(组织)的编译器。而CC则一般是makefile里面的一个名字,即宏定义,嘿,因为Linux/Unix都是大小写敏感的系统,这点一定要注意。 cc是Unix系统的C Compiler,而gcc则是GNU Compiler Collection,GNU编译器套装。gcc原名为Gun C语

yzycqu 1386

cygwin下使用vi

在安装了cgywin之后,在里面会经常用到VI命令,在进行VLC编译时会用到VI的创建文件、修改文件等命令,如果你嫌麻烦,则可以在windows下直接对文件进行操作,如果想学下VI使用,下面的教程非常好。从一开始我也不习惯在cygwin下用VI,要修改个东西麻烦死了,后来了解了VI命令之后,慢慢就习惯了。 【Vi编辑器的基本使用方法】vi编辑器是所有UnixLinux系统下标准的编辑器,它的强

热爱生活的男青年 1236

GCC的编译过程以及其同盟成员和ELF文件的分析

文章目录一、GCC的同盟成员介绍1.GCC的介绍2.同盟成员之Binutils3.同盟成员之C 运行库二、GCC的详细编译过程1.编译的简介2.预处理(Preprocessing)3.编译为汇编代码(Compilation)4.汇编(Assembly)5.链接(Linking)6.补充部分(1) 多个程序文件的编译(2)检错(3)库文件连接三、ELF文件的分析补充内容:反汇编四、总结五、参考资料 一、GCC的同盟成员介绍 1.GCC的介绍 GCC:GCC(GNU C Compiler)是编译工具。经过了

m0_53302175的博客 404

设计美好的服务器(4)--Mule ESB笔记

Overview Mule  Mule ESB笔记(花钱的年华)  Mule Training(MuleConf2007)  Exploring ESB Patterns with Mule(java.net)  Mule: A Case Study(TSS)  Evolutionary integration with ESBs(I

花钱的年华 1万+

ESB工具比较

最近想学习了解下ESB 就从网上载了下:各种ESB产品比较  ESB产品一览表包括商业和开源: 类型 产品 公司 商业 Oracle Service Bus (OSB) Oracle Oracle Enterprise Service Bus (ESB) WebSphere Enterprise Service Bus IBM WebSphere M...

iteye_13479的博客 2023

mule优点和缺点

优点1.开源 https://github.com/mulesoft/mule2.丰富的connector ,可以通过不同的形式来连接各个系统JMS、Web Service、JDBC、HTTP等3.components(组件)很多,可选的处理数据方式多4.transformers也很丰富,可扩展 json、xml、dom、二进制、wsdl、java等5.mule esb 采用java实现,java...

jiazhipeng12的专栏 1361

各种ESB产品比较

 介绍了主流商业和开源ESB的发展趋势、可借鉴的地方和其缺点: 主要介绍: Oracle Service Bus WebSphereMessageBroker Mule ServiceMix/FUSE ESB Synapse/WSO2 ESB ESB产品一览表包括商业和开源: 类型 ...

xinyuan的专栏 2484

将Mule ESB Http项目换为Tomcat项目(1) 总论

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34195142的博客 88

Mule调研小结

调研采用的是mule-standalone-3.4.0版本 + MuleStudio-for-win-32bit-3.5.0,拿到的是社区版,社区版存在的问题主要有两个,一是没有管理控制台,二是没办法集群部署。 从功能特性上看,Mule没有遵照JBI(Java Business Integration)和SCA(Service Component Architecture),遵循SEDA(S...

iteye_12404的博客 232

将Mule ESB Http项目换为Tomcat项目(1) 总论

这个系列讲述如何将一个Mule Http Endpoint入口项目换为可以运行在Tomcat 7上的web项目

u011126891的博客 799

mule优缺点和MEL

优点1.开源 https://github.com/mulesoft/mule2.丰富的connector ,可以通过不同的形式来连接各个系统JMS、Web Service、JDBC、HTTP等3.components(组件)很多,可选的处理数据方式多4.transformers也很丰富,可扩展 json、xml、dom、二进制、wsdl、java等5.mule esb 采用java实现,jav...

weixin_34128237的博客 711

工作小记

今天加了几个ESB的群,讨论了一下ESB选型的问题,特别是MULE,感觉开源的里面MULE还是很吃得开的,不过了解到MULE社区版不支持集群,这个似乎点中要害了,有什么方法可以帮助社区版MULE做集群吗?JVM集群?Terracotto?这个给好好研究下,要不也是选型中的问题。Camel+spring似乎也是一个不错的ESB搭配方案,当然是那种很轻量级的,需要很多的自行扩展。看来这个ESB选型还真

520
上一篇: 从Windows到Linux—— 快速上手指南
下一篇: 一道初学者题目,“ 用1-9数字做不重复填充等式:_ _ _ _X_=_ _ _ _”
SmileOnce
博客等级 码龄22年 17粉丝 25原创
评论 56
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值