在cygwin下用gcc编译过程详解一个程序的详细步骤,求详解

cygwin下如何安装GCC (better)
我的图书馆
cygwin下如何安装GCC (better)
cygwin下如何安装GCC
安装 GCC 最快捷的方式是在您的机器上安装完整的 Cygwin 环境。Cygwin 是 Windows 上类似于 Linux
的环境。它包括一个提供 UNIX 功能性基本子集的 DLL 以及在这之上的一组工具。安装好 Cygwin
之后,通常可以忽略它,即使您是命令行的爱好者,您仍能发现您活得更舒坦了。
确保您具有相当快速的 Internet 连接。GCC 编译器及相关实用程序大约有 50 兆字节。另外确认您的连接是否需要一个代理服务器。这可通过您的 Internet 浏览器选项: 工具 -& Internet 选项 -&连接 -&局域网(LAN)设置来确定。
确保在您的管理员帐户下安装这个程序,并选择为“所有用户”安装。
将您的 Internet 浏览器指到 。在屏幕的中央是一个黑绿两色组成的 “C” 徽标,标题是“Install or update now.”。在该链接上点击,这将下载一个小程序 setup.exe(250KB)。这个安装程序将在您的机器上引导 Cygwin 环境的安装或更新过程。
运行安装程序
将 setup.exe 下载到一个已知地方,如桌面,然后运行它。
它将打开安装向导,如下图所示:图 1. Cygwin 环境的安装向导
点击 Next按钮。
选择下载位置
在这个页面上,选择"Install from Internet"。图 2. 选择安装类型
点击 Next按钮。
选择一个安装目录
在这个页面上,选择执行 Cygwin 所在的目录。
设置图3所示的剩余选项。图 3.选择一个安装目录
点击 Next按钮。
选择一个临时安装目录
在这个页面(图4),为安装包选择一个临时目录。当 Cygwin 安装完成后,您可以删除这个目录和它的内容。
注意安装程序记住了这个目录,并在更新时只下载比这个目录中的包更新的版本。如果您删除这个目录并重新安装, setup将重新安装您选择的所有内容而不管这些包的安装程序在运行目录中已经存在。 图 4.选择一个临时安装目录
点击 Next按钮。
指定您的 Internet 连接
在这个页面上(图5),指定 Internet 连接。如果你有代理服务器,选择“使用 IE5 设置”,或从您的浏览器选项获得服务器名,选择使用代理,然后输入代理服务器的主机名和端口号。图 5. 选择连接类型
点击 Next按钮。
选择下载站点
在这个页面上(图6),选择一个下载站点。因为这些站点是义务的镜像,所以选择一个下载点有点风险(通常它们是可用的,但有时不可用)。通常,试试离你比较近的那个站点。图6. 选择一个下载站点
点击 Next按钮。
选择包进行安装
在这个页面上,您将选择要安装的包。默认情况下,Cygwin 基本包将不安装 GCC,因此,您必须修改默认设置。
将鼠标移动到 Devel边的加号(+)上,然后点击它展开 Devel类。 图 7. 选择包进行安装
您会看到在 Devel 下有许多入口,其中只有三个是您需要的,次序如下:
不是所有默认的基本包都需要运行 GCC,但它们不太大,因此为简单化,就安装它们。
注意很容易选错包或版本,尤其在重新安装的时候,因为选择窗口中的循环按钮是不标准的。在这一步我们建议的就是多加小心,尤其是有多个 GCC 版本的情况下。
为选择这三个包,点击列 New中每个双向箭头直到显示每个包的版本号。根据您机器上已安装的以及镜像上所拥有的合适的版本,列入口在各图标间循环:
如果有多个版本可用,选择数字最大的一个。要下载二进制文件,确保选中了“Bin”列的复选框。图 9. 下载二进制文件
选择完三个包之后,Cygwin 就访问选择的镜像主机,然后下载那三个包以及默认的基本包。根据您的连接速度这将持续几分钟,在安装期间,将打开和关闭许多弹出窗口。
因为存放 Cygwin 安装的镜像站点是义务的,有时不可用或负荷过重。如果发现选择的镜像没有响应,就按取消 ( Cancel),这将终止整个安装程序。
惟一的办法就是重新开始安装并选择另一个镜像;这非常让人感到沮丧。幸运的是,安装程序记住了大多数您上次所做的,因此通常取默认情况。在重新选择正确的包时必须小心,因为在后面的安装中不帮你选择这些内容。
setup程序然后询问是否在您的桌面或开始菜单创建一个 Cygwin 快捷键。该快捷键启动 Cygwin shell (称为 bash), 这对我们计划中的 DB2 使用并不是必须的,但对测试我们的安装是有用的。因此让 setup至少创建一个桌面快捷键。我们将在安装的后面使用它。
最后,点击 Finish按钮。我们将在 后面测试安装结果。 图 10. 完成安装
TA的最新馆藏[转]&[转]&[转]&[转]&[转]&[转]&新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
白手起家, 积分 23, 距离下一级还需 177 积分
论坛徽章:0
  在Cygwin/gcc环境下编译出来的程序,在Windows下执行的时候必须依赖cygwin1.dll,如果要不依赖于这个dll文件的话,可在用Cygwin/gcc编译时加上-mno-cygwin选项。
  在加上这个选项时,Cygwin/gcc会自动加上它的一个交叉编译mingw。mingw是gcc在windows上的一个实现。
& & & & & & & &
& & & & & & & &
& & & & & & & &
本文来自ChinaUnix博客,如果查看原文请点:
&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp3183人阅读
的使用(一)
的朋友不习惯于用
的开发环境。虽然很乐意尝试一下,但是往往怕
系统打乱了自己的正常生活:
系统给搞坏了,导致自己无法正常生活;
开发上手太难,写出第一个
helloworld
的难度,环境配置摸不着头脑。
对于此,我的看法是:路不管平还是陡,终归你要走的,如果你愿意投入到
开发的社群中来,不会安装
系统,不会配置工作环境是不能想象的。
事实上,确实要了解很多东西的原理,不然很难排错:诸如,硬盘引导器的引导原理、分区结构原理及
分区结构和文件系统、环境变量的设置、
种类繁多的压缩包安装包的解压安装方法、用户管理权限管理等常用命令、以至于驱动安装系统中文化等等异常琐碎的东东
本文试图跳过这个难走的步骤,启用一个
仿真器(和
下面的命令行开发环境基本一致),用短短的
分钟的时间,教你做出一个纯正的
helloworld
。就象是买点心前先尝尝味道,不也是一件很愉快的事情么?
事实上不仅有此模拟功能,它也是移植
unix&--&win
程序的一个很
有效的工具,也有人用它来做嵌入式系统开发
这个问题你最好
或许能够获得更为详尽的答案。简而言之,
平台上运行的
模拟环境,是
cygnus solutions
公司开发的自由
软件(该公司开发了很多好东西,著名的还有
,不过现已被
收购)。插一句废话,很多朋友不明白
的区别和联系,在此也简要介绍一下。
是一个注册商标,是要满足一大堆条件并且支付可观费用才能够被授权使用的一个操作系统
的克隆版本,是由其创始人
和诸多世界知名的黑客手工打造的一个操
作系统。为什么
之间有很多软件可以很轻松的移植?因为
所以在运行机制上跟
相近。以下引用网上的一段话用于说明
的工作机制:
当初首先把
等开发工具进行了改进,使他们能够生成并解释
的目标文件。然后,他们要把这些工具移
上去。一种方案是基于
对这些工具的源代码进行大幅修改,这样做显然需要大量工作。因此,他们采取了一种不同的方法&&他们
写了一个共享库
cygwin dll)
风格的调用(如
fork,spawn,signals,select,sockets
等)封装在里面,也就是说,他们基于
系统库的模拟层。这样,只要把这些工具的源代码和这个共享库连接到一起,就可以使用
主机上的交叉编译器来生成可以在
平台上运行的工具集。以这些移植到
平台上的开发工具为基础,
又逐步把其他的工具(几乎不需要对源
代码进行修改,只需要修改他们的配置脚本)软件移植到
上来。这样,在
平台上运行
和开发工具、用户工具,感觉好像在
上工作。关于
实现的更详细描述,请参考
/cygwin-ug-net/highlights.html
的安装文件很容易通
前国内的网站上有
本地安装版
两种。标准的发行版应该是
络安装版。两者并无大不同,下面介绍一下安装的过程。
下载后,点击安装文件
(setup.exe)
进行安装,第一个画面是
版权说明,点
,进入安装模式选择画面。
安装模式有
from Internet&
&Download form Internet&
from Local Directory&
&Install form Internet&
装,适用于网速较快的情况。如果你和我一样网速不是很快,或者说装过之后想把下载的安装文件保存起来,下次不再下载了直接安装,就应该选择
&Download form Internet&
下载安装的文件(大约
接下来是选择安装
目的路径和安装源文件所在的路径,之后就进入了选择安装包所在的路径。
注意了阿,这里可是
重头戏。我第一安装的时候就是没有看清这一步,结果没有把
装进去,导致没法编译文件。
All& Default
Admin Default
&&&&&& ....
Devel&& Default
Editors Default
&&&&& ....
如上图所示,你在这个
的某个节点上双击,就可以改变它的状态,如
四种状态。默认的都是
状态,很多工具的默认状态都是不安装。在这里我选择了在
这一行上后面的
,全部安装,以免后患。(注意:这里
的树形控件和
的不同,你试试点在
这一行后面的
上点,会有不同的响应)
点下一步,安装成功。它会自动在你的桌面上建立一个快捷方式。
好了,下面就开始我的
旅程了。双击
的快捷方式进入系统。
首先介绍几个简单的
显示当前的路径
改变当前路径,无参数时进入对应用户的
列出当前目录下的文件。此命令有
多参数,比如
列出当前系统进程
杀死某个进程
文件改名或目录改名
显示文件的最末几行
下面的命令大多都有很多参数,可以组合使用。所以,每当你不会或者记不清楚改用那个参数,那个开关的
时候,可以用
找,比如,我想查找
么使用,可以键入
系统回显信息如下:
LS(1)&&&&&&&&&&&&&&&&&&&&&&&&& FSF&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&& ls - list directory contents
[OPTION]... [FILE]...
DESCRIPTION
&&&&&& List
information about the FILEs (the current directory by
&&&&&& default).& Sort entries alphabetically if none of -cftuSUX
&&&&&& nor
&&&&&& -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
/home/administrator
目录,我当前的登陆帐号是
administrator
# mkdir source
建立一个叫做
# cd source
/home/administrator/source
# vim hello.c
编辑器,来编写程序。好了,现在有必要简要介绍一下
界,有两大编辑器最有历史。其一是
现在已经演化成了
,比当前的
更为强大。
是两种截然不同的东西,
强调用简洁的命令来完成功能,无论是查找、
替换、正则表达式匹配、编译、链接、排错、函数间跳转等等等等都在命令行中完成,并且它把方向键也集成在了
四个键之上,可以说,用了
基本上可以不用鼠标了
则是在功能强大上做文
章,版本控制、模拟多种编辑环境、对文本进行各种操作,可谓之一个强大的文本处理系统。
Ctrl+Alt+K
之类的组合键来控制的;
等简洁命令来控制的。
中只提供了
能不能自己装
我还没有试过
,我们就先体验一下
加载文本文件后分为命令模式和插入模式两种。插入模式,顾名思义就是输入编辑文本;命令模式,则是
令,常用的有:
进入编辑模式
有些命令是可以组合使用的,如果你修改了某个文件,想存盘退
出,则可以使用
果你想放弃存盘,直接退出则可以使用
好了大家体验一下吧,记住:从编辑模式退回命令模式按
,在输入指令,从命令模式进入编辑模式用
,初次使用
肯定很难受,嘿嘿,不过用多了就习惯了,确实
文件,输入:
int main(void) {
&Hello World!&);
然后,输入
命令退到命令行。
输入编译指令:
gcc hello.c -o hello
编译成功后可以看一下
了吧,嘿嘿。
好,让我们运行看
效果如何?不错吧?
,现在玩一个
hello world
vim world.cpp
void main() {
&& &Hello World!&;
# g++ world.cpp -o world
运行一下哈,
如何,效果不错吧?诸位都是高手,走到这步应该编些简单程序都不成问题了吧。
编译文件生成.exe& 原来加上了./&
&&相关文章推荐
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:562720次
积分:5210
积分:5210
排名:第4700名
原创:63篇
转载:212篇
评论:25条
(1)(2)(9)(7)(1)(3)(10)(29)(11)(8)(12)(9)(5)(4)(7)(3)(3)(3)(1)(1)(2)(2)(8)(13)(9)(8)(4)(1)(3)(1)(1)(12)(1)(9)(8)(9)(6)(12)(9)(1)(9)(7)(15)最近打算设计新产品,在Friendly Arm买了一套Matrix5系统研究一下。发现用ARM-Linux开发似乎比较明智些!
但用Windows习惯了,还不太熟悉Linux,而且重装RH9恐怕很费事。还是先用Win2000吧,Linux熟悉熟悉再说!
看见版上有个Cygwin,可以在Windows下建立仿Linux系统,下了一个试用一下,感觉还不错,只可惜没有图形界面!
根据杨老板所说,Cygwin里可以编译Matrix5的vivi和kernel。就先以此开始熟悉Linux吧!
大约用了一周左右的时间,终于搞定了vivi和kernel在Cygwin里的编译。
现在把编译的过程贴出来,以供有相同感受的兄弟们参考:
(由于Cygwin里操作全部使用行命令输入方式,所以最好先熟悉一下Linux的常用命令)
1、安装Cygwin:
安装过程不多说了,开发中心里有参考。不过要提两点:最好在系统比较干净时安装,建议系统刚启动完就安装,否则安装可能会出错;另外安装时一定要装gcc和ncurse库,否则menuconfig用不了,假如搞不清就全部安装吧!
装完Cygwin后会有一个快捷方式,运行它就可以进入Cygwin系统了。第一次进Cygwin系统还会有一些初始化过程,完了会进入命令输入状态,提示符为“&用户名&@&计算机名&”。 ARM
这里要先说明一下,Linux的文件系统是从/开始的,Cygwin系统的/就是在Windows里安装Cygwin时选的安装路径(X:\cygwin)。假如想在Cygwin里访问Windows的所有逻辑盘,到/cygdrive里找。比如Windows里的C:就是Cygwin里的/cygdrive/c 。这样可以在Windows和Cygwin中交叉访问文件,对于已经熟悉Windows操作的人来说是比较方便的。
还有就是要注重Linux里是区分大小写的,也就是说“file”和“FILE”不是同一个名字。尤其一些文件或目录名中既有大写字母也有小写字母,注重不要输错!
2、安装arm-linux-gcc:
这个安装开发中心里也有,去下载一下解开就算安装好了,注重要解到/opt目录(Windows中的X:\cygwin\opt)下。
修改启动脚本/etc/profile文件(可在Windows中用文本编辑器修改X:\cygwin\etc\profile)中的PATH环境变量为
PATH=/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/opt/FriendlyARM/crosstool/arm-linux/gcc-2.95.3-glibc-2.2.3/bin:$PATH
gdbserver可以先不用,好象是Debug时才会用到。至少我在编译时是没用到。
输入“arm-linux-gcc -v”,自己测试一下吧。
3、编译VIVI:
在开发中心已有较具体的说明。一定要下载版上的“vivi_cygwin.tgz”,不要用光盘里的。预配置文件在包里已经有了(config.friendlyarm),不用再下载。 字串5
由于VIVI要用到kernel的一些头文件,所以需要kernel的源代码,在光盘里“SBC-2410X/SBC-2410X-Linux/matrix5-kernel-v5.5.tgz”。将vivi和kernel都解到/friendly-arm下,即/friendly-arm/vivi和/friendly-arm/kernel里。然后需修改/friendly-arm/vivi/Makefile里的一些变量设置:
LINUX_INCLUDE_DIR = /friendly-arm/kernel/include/
CROSS_COMPILE = arm-linux-
ARM_GCC_LIBS = /opt/FriendlyARM/crosstool/arm-linux/gcc-2.95.3-glibc-2.2.3/lib/gcc-lib/arm-linux/2.95.3
三个变量在不同位置,自己找一下吧。其中前面两个变量杨老板已经改好了,核对一下就可以了;注重第三个变量中FriendlyARM中间没有减号,gcc-2.95.3-glibc-2.2.3中的g是小写。
为确保编译的有效性,最好在编译之前将vivi里所有的“*.o”和“*.o.flag”文件删掉(本人曾经上过当)。
进入/friendly-arm/vivi目录里,输入“make menuconfig”,开始选择配置。可以Load也可以自己修改试试(不要乱选,有些选项是不能支持的)。注重Exit时一定要选“Yes”保存配置。
再输入“make”正式开始编译,一会儿就完了。假如不报错,在/friendly-arm/vivi里面就有你自己的“vivi”了。 字串5
4、编译kernel:
这是最痛苦的一步,开发中心里虽然有这个条目,但还没放上去。只好自己摸,搞了好几天。
kernel的源程序在上面编译vivi时已经解到/friendly-arm/kernel中了。因为这个程序包已在Linux中编译过,有一些中间和目标代码和Cygwin是不兼容的。必须先处理一下,否则不能正常进行编译。
首先,还是把kennel里所有的“*.o”和“*.o.flag”文件删掉,以免不必要的麻烦。然后进入/friendly-arm/kernel目录,可以输一下“make menuconfig”试试。结果提示出错。这是由于配置脚本已在Linux中编译过,在scripts/lxdialog里产生了一个Linux下的可执行程序lxdialog。在Cygwin里这是个坏东西,它既不能执行,还会阻止可执行程序的生成。必须把它删掉。类似的文件如下:
/friendly-arm/kernel/scripts/lxdialog/lxdialog
/friendly-arm/kernel/scripts/mkdep
/friendly-arm/kernel/scripts/split-include
/friendly-arm/kernel/drivers/char/conmakehash
/friendly-arm/kernel/drivers/net/hamradio/soundmodem/gentbl
这几个文件必须删掉,注重是没有扩展名的文件,不要把源文件“*.c”删掉!
现在应该可以用“make menuconfig”进行配置了。这里的选项太多,先Load包里的config.friendly配置,待会儿再慢慢研究各个选项吧。同样,Exit时一定要选“Yes”保存配置。
下面可以开始编译了。输入“make zImage”,可以看见开始一个个模块的编译。但是过了一、二分钟,就会报一个错,大概是说“/friendly-arm/kernel/include/asm/arch/ide.h”没找到。这个问题很希奇,按理说头文件丢失是个低级错误,不可能发现不了,不知道RH9中编译是否也有同样问题。可以这样解决,从别的地方复制一个ide.h过来,只要其中有相应的两个函数定义就可以了。比如:
cp /friendly-arm/kernel/include/asm/arch-l7200/ide.h /friendly-arm/kernel/include/asm/arch/ide.h
再执行“make zImage”应该可以完成编译了。不过时间比较长,得要好几分钟。不报错的话,在/friendly-arm/kernel/arch/arm/boot目录里会生成你编译的zImage 。
接下来,也许你打算自己修改一下“make menuconfig”里的配置。这里有个比较麻烦的问题,你最好先把“/friendly-arm/kernel/.hdepend”这个文件备份一下。问题是这样的:当你修改了某些比较要害的选项后,会提示你进行“make dep”。此时即使你直接进行“make zImage”,该过程亦会自动先运行。一旦执行到一个要生成“.hdepend”的命令时会提示命令参数太长。再看.hdepend已成了一个空文件。 ARM开发论坛
这个“.hdepend”真是个头痛的问题,估计在RH9里应该没这种事,否则这编译根本进行不下去。开始想把Cygwin的设置改一下应该就可以了,可找了半天也没找到有关的设置。求助杨工,倒是给了一个办法,可还是不顶用。直到现在,这个问题仍没有很好的解决。不过,把我自己用的两个方法写出来给大家参考一下:
a)把备份好的“.hdepend”复制回来,修改“/friendly-arm/kernel/Makefile”,将其中一行“scripts/mkdep -- `find $(FINDHPATH) -name SCCS -prune -o -follow -name \*.h ! -name modversions.h -print` & .hdepend”的行首加一个“#”字符。实际上就是直接使用原有的“.hdepend”,编译时跳过重新生成该文件。此法已经试过,是可以的。但有什么副作用不知道!
b)仍然要把“Makefile”中生成“.hdepend”那一行去掉,换成下面三个命令行:
scripts/mkdep -- `find $(HPATH)/asm -name SCCS -prune -o -follow -name \*.h ! -name modversions.h -print` & .hdepend
scripts/mkdep -- `find $(HPATH)/linux -name SCCS -prune -o -follow -name \*.h ! -name modversions.h -print` && .hdepend 字串4
scripts/mkdep -- `find $(HPATH)/scsi $(HPATH)/net -name SCCS -prune -o -follow -name \*.h ! -name modversions.h -print` && .hdepend
注重三行前面都有一个TAB。当执行过“make dep”后还要手工修改一下“.hdepend”:查找“.PRECIOUS:”字样引导的三段列表,将它们合并成一个“.PRECIOUS:”列表(列表头上的“.PRECIOUS:”留着,中间两个删掉即可)并将列表放在文件尾上。然后再执行“make zImage”即可完成编译。此法较麻烦,但可靠性高一点!
EEWORLD 官方微信
Powered by
逛了这许久,何不进去瞧瞧?

我要回帖

更多关于 gcc编译参数详解 的文章

 

随机推荐