最新Linux系统中如何编译C程序

上传人:汽*** 文档编号:586527603 上传时间:2024-09-04 格式:PPT 页数:56 大小:1.15MB
返回 下载 相关 举报
最新Linux系统中如何编译C程序_第1页
第1页 / 共56页
最新Linux系统中如何编译C程序_第2页
第2页 / 共56页
最新Linux系统中如何编译C程序_第3页
第3页 / 共56页
最新Linux系统中如何编译C程序_第4页
第4页 / 共56页
最新Linux系统中如何编译C程序_第5页
第5页 / 共56页
点击查看更多>>
资源描述

《最新Linux系统中如何编译C程序》由会员分享,可在线阅读,更多相关《最新Linux系统中如何编译C程序(56页珍藏版)》请在金锄头文库上搜索。

1、信息科学与技术学院赐槽佯娇焰后波薄痢魁卑东峦铁褂炕婉团僚盐扰闹例凹欧酗衡历践的磁尘Linux系统中如何编译C程序Linux系统中如何编译C程序LinuxLinux操作系统操作系统上课教师:上课教师: 张利张利上课时间:上课时间: 2009 2009年春季年春季君荡睫匹饿巨守涛氯俐淘哎岭诚固径怀干翼煮书拭介讳惯遭知庆专卧千秀Linux系统中如何编译C程序Linux系统中如何编译C程序Linux系系统中如何中如何编译C程序程序登陆后用vi写一个C程序:过程如下:viHelloLinux.c回车进入后选择一种输入方式(a,i,o);#includemain()printf(HelloLinux!n)

2、;规遵行恨凹殴李傈矛历鲸午哮礁帜当食筏桑鸟哑敢术娄昔免罗税址呆贰塑Linux系统中如何编译C程序Linux系统中如何编译C程序Linux操作系统操作系统Linux系系统中如何中如何编译C程序程序用Vi输入程序时,修改,编辑代码很复杂,可以用“application”中的“附件”的“文本编辑器”进行编辑#includemain()printf(HelloLinux!n);愧罩辨寨希谢蘸菇只抛禽撕沟眩墨惊同豫越瓣楔檬晶朋嚣琳州撮洁巾怎蛇Linux系统中如何编译C程序Linux系统中如何编译C程序Linux操作系统操作系统写完程序后Esc并保存退出(:w“保存”:q“退出”)然后用gcc编译:gcc

3、HelloLinux.c回车用ls查看就会看到一个HelloLinux.out文件,下面我们运行它;。/HelloLinux.out回车将会显示Hellolinuxlinux!的嵌赡继仍袋腋初潞猫运蹋模睬咱祟讨考级撩脾出陪讳洞丽馁外手藤槛掐Linux系统中如何编译C程序Linux系统中如何编译C程序Linux操作系统操作系统linux下下对C代代码的的编译在linuxlinux下对C代码的编译时极其简单的,但是,不能忘记步骤。要进入自己所要的目录:cd文件名如果要是返回上级目录:cd要查看下面的子目录:ls或者ll建立新目录:mkdir文件名删除空目录:rmdir文件名非空的rm编译:gcc-

4、otesttest.c输出:。/test壹杭谊欠熏孽卷渺吐光疯极厌涉娘草漏狈痢夷杀才筹斤出寅损溪桩敛叼挞Linux系统中如何编译C程序Linux系统中如何编译C程序Linux操作系统操作系统Linux平台下关于平台下关于GCC编译及使用的方法及使用的方法编译:第一步、是进行预编译,使用-E参数可以让GCC在预处理结束后停止编译过程:gcc-Ehello.c-ohello.i预处理的宏定义插入到hello.i中第二步、是将hello.i编译为目标代码,这可以通过使用-c参数来完成:gcc-chello.i-ohello.o也可以通过源文件直接生成gcc-chello.c第三步、是将生成的目标文件

5、链接成可执行文件:gcchello.o-ohello也可以通过源文件直接生成gcc-ohellohello.c豺粱细句鸟并索阿巾寿肢众圾航七龟娄级捆诧飘令详昆瞪芽番产宇嘴抓讹Linux系统中如何编译C程序Linux系统中如何编译C程序Linux操作系统操作系统警告:1、-pedantic选项,那么使用了扩展语法的地方将产生相应的警告信息2、-Wall使用它能够使GCC产生尽可能多的警告信息3、-Werror,它要求GCC将所有的警告当成错误进行处理库依赖:1、Linux下的大多数函数都默认:头文件放到/usr/include/目录下而库文件则放到/usr/lib/目录下燃戚入燃晤表石蜒牡董痒抢

6、懊阶泊倚鬃肝搁晾杏泼卜绘姿奸婴邹潭啥陇乖Linux系统中如何编译C程序Linux系统中如何编译C程序Linux操作系统操作系统2、GCC在编译时必须有自己的办法来查找所需要的头文件和库文件。-I选项可以向GCC的头文件搜索路径中添加新的目录。例如,如果在/home/xiaowp/include/目录下有编译时所需要的头文件,为了让GCC能够顺利地找到它们,就可以使用-I选项:gcc-otesttest.c-I/home/xiaowp/include-L选项向GCC的库文件搜索路径中添加新的目录例如,如果在/home/xiaowp/lib/目录下有链接时所需要的库文件libfoo.so,为了让G

7、CC能够顺利地找到它,可以使用下面的命令gcc-otesttest.c-L/home/xiaowp/lib-lfoo值得好好解释一下的是-l选项,它指示GCC去连接库文件libfoo.so.衷靴章昏物冀降鸿池秦萤鳃刃锡档谊迹酪婪宪分哎题鞠煮扼淋鼠阵潦蔷稍Linux系统中如何编译C程序Linux系统中如何编译C程序Linux操作系统操作系统Linux下的库文件在命名时有一个约定,那就是应该以lib三个字母开头,由于所有的库文件都遵循了同样的规范,因此在用-l选项指定链接的库文件名时可以省去lib三个字母,也就是说GCC在对-lfoo进行处理时,会自动去链接名为libfoo.so的文件。-stat

8、ic选项,强制使用静态链接库如果在/home/xiaowp/lib/目录下有链接时所需要的库文件libfoo.so和libfoo.a为了让GCC在链接时只用到静态链接库,可以使用下面的命令:gcc-otesttest.c-L/home/xiaowp/lib-static-lfoo选项-O可以告诉GCC同时减小代码的长度和执行时间,其效果等价于-O1.在这一级别上能够进行的优化类型虽然取决于目标处理器,但一般都会包括线程跳转(ThreadJump)和延迟退栈(DeferredStackPops)两种优化。仔捉墟攫消谰持滚痘惫昌洁居怯下豺账渤踏说木惩噶下梢患幻摸方蘸淀鄙Linux系统中如何编译C程

9、序Linux系统中如何编译C程序Linux操作系统操作系统选项-O2告诉GCC除了完成所有-O1级别的优化之外,同时还要进行一些额外的调整工作,如处理器指令调度等。选项-O3则除了完成所有-O2级别的优化之外,还包括循环展开和其它一些与处理器特性相关的优化工作。通常来说,数字越大优化的等级越高,同时也就意味着程序的运行速度越快。许多Linux程序员都喜欢使用-O2选项,因为它在优化长度、编译时间和代码大小之间,取得了一个比较理想的平衡点。time./test查看程序执行时间优化虽然能够给程序带来更好的执行性能,但在如下一些场合中应该避免优化代码:旅定喊圭界舌胖琐窘怎彭疥是联蛊氢董汲蛾胁蓄因抗治

10、亚无泄拜泵琉同涅Linux系统中如何编译C程序Linux系统中如何编译C程序Linux操作系统操作系统程序开发的时候优化等级越高,消耗在编译上的时间就越长,因此在开发的时候最好不要使用优化选项,只有到软件发行或开发结束的时候,才考虑对最终生成的代码进行优化。资源受限的时候一些优化选项会增加可执行代码的体积,如果程序在运行时能够申请到的内存资源非常紧张(如一些实时嵌入式嵌入式设备),那就不要对代码进行优化,因为由这带来的负面影响可能会产生非常严重的后果。跟踪调试的时候在对代码进行优化的时候,某些代码可能会被删除或改写,或者为了取得更佳的性能而进行重组,从而使跟踪和调试变得异常困难。加速:使用管道

11、代替编译中临时文件,-pipe加速编译gcc-pipefoo.c-ofoo耳萌盒椭缅充仗榔满侯渗遇颠峨钧骡践淌斡咐什订坊套证筷意级沧回晋敢Linux系统中如何编译C程序Linux系统中如何编译C程序Linux操作系统操作系统GCC常用常用选项-c通知GCC取消链接步骤,即编译源码并在最后生成目标文件;-Dmacro定义指定的宏,使它能够通过源码中的#ifdef进行检验;-E不经过编译预处理程序的输出而输送至标准输出;-g3获得有关调试程序的详细信息,它不能与-o选项联合使用;-Idirectory在包含文件搜索路径的起点处添加指定目录;-llibrary提示链接程序在创建最终可执行文件时包含指

12、定的库;-O、-O2、-O3将优化状态打开,该选项不能与-g选项联合使用;-S要求编译程序生成来自源代码的汇编程序输出;-v启动所有警报;-Wall在发生警报时取消编译操作,即将警报看作是错误;-Werror在发生警报时取消编译操作,即把报警当作是错误;-w禁止所有的报警。号馈嘻慎网妒坞宛肿芯凄掩赏颈观奏周须意小劳兵篷潞沂设钓重齐净撬双Linux系统中如何编译C程序Linux系统中如何编译C程序Linux操作系统操作系统构建构建linux下下IDE环境境-Eclipse Eclipse是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建

13、开发环境。幸运的是,Eclipse附带了一个标准的插件集,包括Java开发工具(JavaDevelopmentTools,JDT)。Eclipse最初是由IBM公司开发的替代商业软件VisualAgeforJava的下一代IDE开发环境,2001年11月贡献给开源社区,现在它由非营利软件供应商联盟Eclipse基金会(EclipseFoundation)管理。2003年,Eclipse3.0选择OSGi服务平台规范为运行时架构。2007年6月,稳定版3.3发布。2008年6月发布代号为Ganymede的3.4版。磨永欢阮傈覆筛宛穿耪勾传佐觉两鹅畅再奸史返弃鞋衔询灭攀考砧铰鱼楷Linux系统中如

14、何编译C程序Linux系统中如何编译C程序Linux操作系统操作系统构建构建linux下下IDE环境境-EclipseEclipse是著名的跨平台的自由集成开发环境(IDE)。最初主要用来Java语言开发,但是目前亦有人通过插件使其作为其他计算机语言比如C+和Python的开发工具。Eclipse的本身只是一个框架平台,但是众多插件的支持使得Eclipse拥有其他功能相对固定的IDE软件很难具有的灵活性。许多软件开发商以Eclipse为框架开发自己的IDE。Eclipse最初由OTI和IBM两家公司的IDE产品开发组创建,起始于1999年4月。IBM提供了最初的Eclipse代码基础,包括Pl

15、atform、JDT和PDE。目前由IBM牵头,围绕着Eclipse项目已经发展成为了一个庞大的Eclipse联盟先秤江怕两劲石简凋布芽恨粟视两就咽杜惫点痊婪撑申绿浮施惶端焰漫袁Linux系统中如何编译C程序Linux系统中如何编译C程序Linux操作系统操作系统构建构建linux下下IDE环境境-Eclipse有150多家软件公司参与到Eclipse项目中,其中包括Borland、RationalSoftware、RedHat及Sybase等。Eclipse是一个开发源码项目,它其实是VisualAgeforJava的替代品,其界面跟先前的VisualAgeforJava差不多,但由于其开放

16、源码,任何人都可以免费得到,并可以在此基础上开发各自的插件,因此越来越受人们关注。近期还有包括Oracle在内的许多大公司也纷纷加入了该项目,并宣称Eclipse将来能成为可进行任何语言开发的IDE集大成者,使用者只需下载各种语言的插件即可。蒸返左洋吐蒜寓凭拄雏陈焰滇棺榔冠讣疾干弦煽唤镭飘乙巫喳必彩簿斯驴Linux系统中如何编译C程序Linux系统中如何编译C程序Linux操作系统操作系统构建构建linux下下IDE环境境-Eclipse虽然大多数用户很乐于将Eclipse当作JavaIDE来使用,但Eclipse的目标不仅限于此。Eclipse还包括插件开发环境(Plug-inDevelop

17、mentEnvironment,PDE),这个组件主要针对希望扩展Eclipse的软件开发人员,因为它允许他们构建与Eclipse环境无缝集成的工具。由于Eclipse中的每样东西都是插件,对于给Eclipse提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所。揣泌膛丛凑借惨秸胆挑赊谭轰磋就衙寅妨躇廖赖寐珊挠囱汾谱颂竟君毫奋Linux系统中如何编译C程序Linux系统中如何编译C程序Linux操作系统操作系统构建构建linux下下IDE环境境-Eclipse这种平等和一致性并不仅限于Java开发工具。尽管Eclipse是使用Java语言开发的,但它的用途

18、并不限于Java语言;例如,支持诸如C/C+、COBOL和Eiffel等编程语言的插件已经可用,或预计会推出。Eclipse框架还可用来作为与软件开发无关的其他应用程序类型的基础,比如内容管理系统。基于Eclipse的应用程序的突出例子是IBM的WebSphereStudioWorkbench,它构成了IBMJava开发工具系列的基础。例如,WebSphereStudioApplicationDeveloper添加了对JSP、servlet、EJB、XML、Web服务和数据库访问的支持。最近版本3.4(Ganymede)/2008年6月25日厅蝇烬虏傻氯读三肛署欢谢哄纂撬辅瘪赊科翻炳掷垂虎赡相

19、死轿囤掩棕浅Linux系统中如何编译C程序Linux系统中如何编译C程序Linux操作系统操作系统构建构建linux下下IDE环境境-EclipseEclipse的主要组成的主要组成Eclipse是一个开放源代码的软件开发项目,专注于为高度集成的工具开发提供一个全功能的、具有商业品质的工业平台。它主要由Eclipse项项目目、Eclipse工具项目工具项目和Eclipse技术项目技术项目三个项目组成,具体包括四个部分组成EclipsePlatform、JDT、CDT和PDE.JDT支持Java开发、CDT支持C开发、PDE用来支持插件开发,EclipsePlatform则是一个开放的可扩展ID

20、E,提供了一个通用的开发平台。它提供建造块和构造并运行集成软件开发工具的基础。EclipsePlatform允许工具建造者独立开发与他人工具无缝集成的工具从而无须分辨一个工具功能在哪里结束,而另一个工具功能在哪里开始。酌烤铁软恳霞和贰聋反试库寞描抛等黎藉尹坚吸话钮羔琉筏僚潘邹性吗红Linux系统中如何编译C程序Linux系统中如何编译C程序Linux操作系统操作系统构建构建linux下下IDE环境境-EclipseEclipseSDK(软件开发者包)是EclipsePlatform、JDT和PDE所生产的组件合并,它们可以一次下载。这些部分在一起提供了一个具有丰富特性的开发环境,允许开发者有效

21、地建造可以无缝集成到EclipsePlatform中的工具。EclipseSDK由Eclipse项目生产的工具和来自其它开放源代码的第三方软件组合而成。Eclipse项目生产的软件以CPL发布,第三方组件有各自自身的许可协议。磕友邓堤尚菱憾锻枕姐开注隔捅惰锅掏委躲讫啼岿震烽趴容恼兰矿环帖惑Linux系统中如何编译C程序Linux系统中如何编译C程序Linux操作系统操作系统构建构建linux下下IDE环境境-Eclipse天文界的定义天文界的定义由于它指代“天体的部分或全部受其它天体的遮掩而变得晦暗”,我们可以将其引申为“使黯然失色”,用在英语写作或口语表达上会您增色不少。作名词时,eclip

22、se常和介词in连用,如Fredwasineclipse,exiledtoasmallpostinthesouth.(弗雷德失势了,被打发到南方去担任一个小差使。)作动词时,如:Sheisquiteeclipsedbyhercleveryoungersister.(在聪明的妹妹面前,她变得黯然失色。)另外,如果要强调“日全食”可用totalsolareclipse来表达;“日偏食”则是partialsolareclipse。盒祖隆挤毫班胎材帖署敦喇餐魏谰烘列适移佳澳堪棋锹绪盆际歪仇烃攻样Linux系统中如何编译C程序Linux系统中如何编译C程序Linux操作系统操作系统构建构建linux下下

23、IDE环境境-Eclipse在linuxlinux下构建java、c、c的IDE.使用的环境是redhatlinux9(编译gnome2.4)一:下载下载所需软件(所有下载下载的软件均放在/opt下)先下载下载Eclipse,网址为http:/www.eclipse.org目前,Eclipse的最新版本為2.1.1,3.0版也正在測試中。我使用eclipse2.1;下载其gtk版本:eclipse-SDK-2.1.1-linux-gtk.zip执行Eclipse是须用到JDK,但Eclipse的安装程序和RedHatLinux9里没有包含JDK,Sun最新版本的JDK可到http:/下载,在此

24、我們使用的是sunjdk(J2SE)1.4.2_01版(也可使用IBM的jdk)。帐卯柱赘雾元甚抽癌巾椎铅识龚接历嚣砖烤荐旅熬最洲特合凋淬胰面缩盏Linux系统中如何编译C程序Linux系统中如何编译C程序Linux操作系统操作系统要在Eclipse上面开发C/C+程序,需要另外安装plug-ins,在此我们使用的是C/C+DevelopmentTools(CDT)。CDT整合了gcc、make、gdb等GUN工具,(CDT与Eclipse中内建的JDT(Java开发环境)比起来,功能还差得远。例如,在JDT中相當好用的Refactor、Refactoring、OrganizeImports等

25、在CDT中都没有。)CDT可从http:/www.eclipse.org/cdt/下载,目前最新版本为CDT1.1GA2.二:安装1.由于cdt需要gcc等工具,所以要先把redhat9的软件开发包装上,2.安装JDK(需以root身分安装):栽寇盲番庆顽域拢畏庸崇侵吱扒城炽哼凄织屹桨宋慑淳吟孽躁警朱嗜标辈Linux系统中如何编译C程序Linux系统中如何编译C程序Linux操作系统操作系统rootredarmarmychmodxj2sdk-1_4_2_01-linux-i586-rpm.binrootredarmarmy./j2sdk-1_4_2_01-linux-i586-rpm.binr

26、ootredarmarmyrpmivhj2sdk-1_4_2_01-linux-i586-rpm.bin安装好的JDK会存在/usr/java/j2sdk1.4.2_01目录中。设定JAVA_HOME,CLASSPATH,PATH;在/etc/profile文件最后加如下四行:exportJAVA_HOME=/usr/java/j2sdk1.4.2_01exportPATH=$JAVA_HOME/bin:$PATHCLASSPATH=.:/usr/java/j2sdk1.4.2_01/lib/tools.jar:$CLASSPATHexportCLASSPATH蹋枚奸操考征勃辗邹瓢硬舷记摊檬普

27、囱乌候皑吟嫩疑瞅胰亮跪挥过贼馋带Linux系统中如何编译C程序Linux系统中如何编译C程序Linux操作系统操作系统3.安裝Eclipse,在此我把Eclipse安装在/opt下,安装Eclipse很简单,只要把下载回来的压缩包解压就可以了;解压后得到eclipse目录;rootredarmarmyunzipd/opteclipse-SDK-2.1.1-linux-gtk.zip为让每一个帐号都可以执行Eclipse,我写了个小脚本(eclipse.sh):#!/bin/bash#执行eclipse2.1.1#exportJAVA_HOME=/usr/java/j2sdk1.4.2_01ex

28、portCLASSPATH=/usr/java/j2sdk1.4.2_01/lib堂显娇转释键拾审捡户岸脊傅竟宅苞凶晕烧挠晾髓凭咬渐谴龋障庇棘皱对Linux系统中如何编译C程序Linux系统中如何编译C程序Linux操作系统操作系统/opt/eclipse/eclipse-vm/usr/java/j2sdk1.4.2_01/bin/java-data/workspace&#-vm参数用以指定使用哪一个jvm来执行Eclipse,#-date参数用以指定Eclipse的数据目录。在此指定其存在用户根目录()下的workspace目录中将eclipse.sh复制到/usr/local/bin中,并

29、为它加上权限755;现在执行eclipse.sh即可启动Eclipse.rootredarmarmycpeclipse.sh/usr/local/binrootredarmarmychmod755/usr/local/bin/eclipse.sh利尖轧裤锨桔腹察回炬忽续屑果阎刚陵预聘弯刚啼南觅踞陋挪瘴的盂稳拥Linux系统中如何编译C程序Linux系统中如何编译C程序Linux操作系统操作系统将eclipse添加到桌面。首先,在桌面上按下鼠标右键,在弹出菜单中选择“新增启动”,之后分別在“名称”中输入Eclipse、“命令”中填/usr/local/bin/eclipse.sh,然后再为它随便

30、找个喜欢的图标(我用的是/opt/eclipse/icon.xpm);再后按“确定”,桌面上就有eclipse的快捷方式了,以后可以直接双击这个图标启动Eclipse.Eclipse安装好后,已经内建了java开发环境(JDT)就可以直接开发JavaJava程序。4.安装cdt,CDT1.1GA目前只支持Eclipse2.1版。将下载的包解压,会得到features和plugins这两个目录rootredarmarmyunzipd/optorg.eclipse.cdt-linux.gtk_1.1.0.bin.dist.zip逢肥荆梗逸配釜览雄犬船惫焉硬楷株讼佩讥估辽刽啥护衷协绣厂西洒单慑Lin

31、ux系统中如何编译C程序Linux系统中如何编译C程序Linux操作系统操作系统分别将这两个目录中的所有文件分别剪到/opt/eclipse下的对应目录里,即可。(Eclipse的插件安裝方法几乎都这样安装:把文件下载后,直接解到eclipse所安装的目录中对应的features和plugins中即可。)三:程序实例这没太多可说,对c、c开发,都是先写源程序,再写个makefile.找个例子。环境已经建起,coding就看大家的爱好。四:附要是不习惯,eclipse英文环境,可以在eclipse.org的主站上下,它的语言包;装了语言包后,不光菜单成中文了,它的帮助文档也成中文了,髓便轻拌炕题

32、赢荣雕癸碱助捞制量菲涎阁缸潞纽斡逼汾件匣许莉楔猾疼鸡Linux系统中如何编译C程序Linux系统中如何编译C程序Linux操作系统操作系统在在Ubuntu8.10中配置的中配置的C,C编程程环境境测试第一部分,用记事本写C程序,并编译。刚装好的系统中已经有GCC了,但是这个GCC什么文件都不能编译,因为没有一些必须的头文件,所以要安装build-essential这个软件包,安装了这个包会自动安装上g+,libc6-dev,linuxlinux-libc-dev,libstdc+6-4.1-dev等一些必须的软件和头文件的库。可以在新立得里面搜索build-essential或输入下面命令:代

33、码:sudoapt-getinstallbuild-essential安装完成后写一个C语言程序testc.c测试测试一下。在gedit中新建一个空白文本文档,为了方便就保存在主文件夹中吧,(因为在任一地方启动终端,直接就到了主文件夹的目录下),可以直接编译的。辰悦真空葵几踩铡郝呈坯躯沉抄涣砌豌落妙酥嵌玉陌吓导崖捏陌铁贺屎氦Linux系统中如何编译C程序Linux系统中如何编译C程序Linux操作系统操作系统应用程序附件文本编辑器写如下代码:#includeintmain()printf(HellozhouxiongfeiwelcometoUbuntuUbuntu!);return0;保存为n

34、otec.c应用程序附件终端输入命令(第一条命令是编译,第二条命令是执行):Ubuntu:$zhouxiongfeiUbuntuUbuntu:$gccnotec.c-onoteczhouxiongfeiUbuntu:$./notecHellozhouxiongfeiwelcometoUbuntu!zhouxiongfeiUbuntu:$琅穆执乃艘丫卞柳裴座拇框方耙譬钥逐颅墒六吓塔背叠睦秉换懦宗掇庚迂Linux系统中如何编译C程序Linux系统中如何编译C程序Linux操作系统操作系统记事本写C并用g+纊译同样,启动记事本gedit写代码:#includeusingnamespacestd;in

35、tmain()coutHi,learningc+ing+endl;return0;妊颈壕华氦斧呐瑶丁暗冰编脊叠洪碗茅啃漾檀产坦踩授斜贸粥培冕尧坊盐Linux系统中如何编译C程序Linux系统中如何编译C程序Linux操作系统操作系统保存在主文件夹目录下,名字就叫noteplus.cpp启动终端,执行命令:zhouxiongfeiUbuntu:$g+noteplus.cpp-onotepluszhouxiongfeiUbuntu:$./noteplusHi,learningc+ing+zhouxiongfeiUbuntu:$蝗壬翱兜豁订归若且藩辉蓄陪悲炽伴吹州蟹俏昂辕盟零滁赁村风入泳箕地Linu

36、x系统中如何编译C程序Linux系统中如何编译C程序Linux操作系统操作系统提示,编译C程序的三条命令g+-Wallhellocpp.cppgcc-Wallhellocpp.cpp-lstdc+gfortran-Wallhellocpp.cpp-lstdc+以上三条命令都是用来编译C程序的。(假定源程序名为:hellocpp.cpp)选项-Wall开启编译器几乎所有常用的警告强烈建议你始终使用该选项锨症宣沉这并赊僵壕倡好逝暗薄炯罚稻京蒙荧莹颓什代蚂饼裕忌妥渍炸踪Linux系统中如何编译C程序Linux系统中如何编译C程序Linux操作系统操作系统注意:开始之前请确保已经安装了build-es

37、sential软件包编译简单的C程序C语言经典的入门例子是HelloWorld,下面是一示例代码:代码:#includeintmain(void)printf(Hello,world!n);return0;彻沟聚木虱殃犯抢忧孪闲窿牺尽司胡剖辰妹妆康幢曲蔑号答抢蹲逊聊盒闪Linux系统中如何编译C程序Linux系统中如何编译C程序Linux操作系统操作系统我们假定该代码存为文件hello.c。要用gcc编译该文件,使用下面的命令:代码:$gcc-Wallhello.c-ohello该命令将文件hello.c中的代码编译为机器码并存储存储在可执行文件hello中。机器码的文件名是通过-o选项指定的

38、。该选项通常作为命令行中的最后一个参数。如果被省略,输出文件默认为a.out。注意到如果当前目录中与可执行文件重名的文件已经存在,它将被复盖。音圭痘蜒篮痴扛款囊图干镜谎赂召贼氰间湾数抛澜官纷眼渔卫瞪蘑罗胸穷Linux系统中如何编译C程序Linux系统中如何编译C程序Linux操作系统操作系统选项-Wall开启编译器几乎所有常用的警告强烈建议你始终使用该选项。编译器有很多其他的警告选项,但-Wall是最常用的。默认情况下GCC不会产生任何警告信息。当编写C或C+C+程序时编译器警告非常有助于检测程序存在的问题。本例中,编译器使用了-Wall选项而没产生任何警告,因为示例程序是完全合法的。要运行该

39、程序,输入可执行文件的路径如下:代码:$./helloHello,world!这将可执行文件载入内存,并使CPU开始执行其包含的指令。路径./指代当前目录,因此./hello载入并执行当前目录下的可执行文件hello请汕戴搽悍污猾诗络释毯镶藐瞩呢睡千领尧浆脱声奈欲蝉清踏唇谤钥织哼Linux系统中如何编译C程序Linux系统中如何编译C程序Linux操作系统操作系统捕捉捕捉错误如上所述,当用C或C+C+编程时,编译器警告是非常重要的助手。为了说明这一点,下面的例子包含一个微妙的错误:为一个整数值错误地指定了一浮点数控制符%f。代码:#includeintmain(void)printf(Twop

40、lustwois%fn,4);return0;一眼看去该错误并不明显,但是它可被编译器捕捉到,只要启用了警告选项-Wall。欺钡损故烙筒娠贰印眼胞猎宅哮尝蹲过眶逻旱十及圾吮西六嫁寿吠褐簿狡Linux系统中如何编译C程序Linux系统中如何编译C程序Linux操作系统操作系统编译上面的程序bad.c,将得到如下的消息:代码:$gcc-Wallbad.c-obadbad.c:Infunctionmain:bad.c:6:warning:doubleformat,differenttypearg(arg2)这表明文件bad.c第6行中的格式字符串用法不正确。GCC的消息总是具有下面的格式文件名:行号

41、:消息。编译器对错误与警告区别对待,前者将阻止编译,后者表明可能存在的问题但并不阻止程序编译。本例中,对整数值来说,正确的格式控制符应该是%d。旋嘴侯羡竭择逢管起给龚搬讨私戚夫便绕鹿促俺炉腺嫩涪功电擎准碘低测Linux系统中如何编译C程序Linux系统中如何编译C程序Linux操作系统操作系统如果不启用-Wall,程序表面看起来编译正常,但是会产生不正确的结果:代码:$gccbad.c-obad$./badTwoplustwois2.585495显而易见,开发程序时不检查警告是非常危险的。如果有函数使用不当,将可能导致程序崩溃或产生错误的结果。开启编译器警告选项-Wall可捕捉C编程时的多数常

42、见错误。编译多个源文件一个源程序可以分成几个文件。这样便于编辑与理解,尤其是程序非常大的时候。这也使各部分独立编译成为可能。楼邢讹都挖豫绅袁拨凑楷碳凋蜡辞掠佃隋息旅漾加岩喘愧嫂拘涣揭窘愧犊Linux系统中如何编译C程序Linux系统中如何编译C程序Linux操作系统操作系统下面的例子中我们将程序HelloWorld分割成3个文件:main.c,hello_fn.c和头文件hello.h。这是主程序main.c:代码:#includehello.hintmain(void)hello(world);return0;在先前的例子hello.c中,我们调用的是库函数printf,本例中我们用一个定义

43、在文件hello_fn.c中的函数hello取代它。赌则侗渐擎淌喜沦位瞳厦遁驴抗石疹晓舅雀址素密像暖茶怒沪烹负筐唯渴Linux系统中如何编译C程序Linux系统中如何编译C程序Linux操作系统操作系统主程序中包含有头文件hello.h,该头文件包含函数hello的声明。我们不需要在main.c文件中包含系统头文件stdio.h来声明函数printf,因为main.c没有直接调用printf。文件hello.h中的声明只用了一行就指定了函数hello的原型。代码:voidhello(constchar*name);函数hello的定义在文件hello_fn.c中:代码:#include#inc

44、ludehello.hvoidhello(constchar*name)printf(Hello,%s!n,name);萧熟小孜夹敛矣掩细肤软佩磷沽勋沦伐仰风溅希虚陕者陵惨有腰进径诬实Linux系统中如何编译C程序Linux系统中如何编译C程序Linux操作系统操作系统语句#includeFILE.h与#include有所不同:前者在搜索系统头文件目录之前将先在当前目录中搜索文件FILE.h,後者只搜索系统头文件而不查看当前目录。要用gcc编译以上源文件,使用下面的命令:代码:$gcc-Wallmain.chello_fn.c-onewhello本例中,我们使用选项-o为可执行文件指定了一个不

45、同的名字newhello。注意到头文件hello.h并未在命令行中指定。源文件中的的#includehello.h指示符使得编译器自动将其包含到合适的位置。要运行本程序,输入可执行文件的路径名:代码:$./newhelloHello,world!鳖组所溃袁醋伴畅首鸳冰题阁坪揩籍举挽精姿兢辱扛种压潜特丢唇琼刊呻Linux系统中如何编译C程序Linux系统中如何编译C程序Linux操作系统操作系统源程序各部分被编译为单一的可执行文件,它与我们先前的例子产生的结果相同。链接外部库库是预编译的目标文件(objectfiles)的集合,它们可被链接进程序。静态库以后缀为.a的特殊的存档文件(archiv

46、efile)存储存储。标准系统库可在目录/usr/lib与/lib中找到。比如,在类Unix系统中C语言的数学库一般存储为文件/usr/lib/libm.a。该库中函数的原型声明在头文件/usr/include/math.h中。C标准库本身存储为/usr/lib/libc.a,它包含ANSI/ISOC标准指定的函数,比如printf。对每一个C程序来说,libc.a都默认被链接。下面的是一个调用数学库libm.a中sin函数的的例子:宣盖奔陀壬獭晋稽轧镰怒灵儡甩陌创李帐闭旁钮苹颖习摆优绦横攀着沁吧Linux系统中如何编译C程序Linux系统中如何编译C程序Linux操作系统操作系统代码:#in

47、clude#includeintmain(void)doublex=sin(2.0);printf(Thevalueofsin(2.0)is%fn,x);return0;尝试单独从该文件生成一个可执行文件将导致一个链接阶段的错误:代码:$gcc-Wallcalc.c-ocalc/tmp/cckDHfI8.o:Infunctionmain:calc.c.text+0x1b):undefinedreferencetosin景蛰良哦挖竹珊孩鳞侗嵌嘿诫厅裤读霄协驻吞看镐遂主父瞪当协岳嫁侵绚Linux系统中如何编译C程序Linux系统中如何编译C程序Linux操作系统操作系统函数sin,未在本程序中定义

48、也不在默认库libc.a中;除非被指定,编译器也不会链接libm.a。为使编译器能将sin链接进主程序calc.c,我们需要提供数学库libm.a。一个容易想到但比较麻烦的做法是在命令行中显式地指定它:代码:$gcc-Wallcalc.c/usr/lib/libm.a-ocalc函数库libm.a包含所有数学函数的目标文件,比如sin,cos,exp,log及sqrt。链接器将搜索所有文件来找到包含sin的目标文件。一旦包含sin的目标文件被找到,主程序就能被链接,一个完整的可执行文件就可生成了邻插卢捌鱼厦坝砸央萎擎港尺皋抬禹颈酣偷联逛派克疵岭须嗅裸朗伸悦祟Linux系统中如何编译C程序Lin

49、ux系统中如何编译C程序Linux操作系统操作系统代码:$./calcThevalueofsin(2.0)is0.909297可执行文件包含主城许的机器码以及函数库libm.a中sin对应的机器码。为避免在命令行中指定长长的路径,编译器为链接函数库提供了快捷的选项-l。例如,下面的命令代码:$gcc-Wallcalc.c-lm-ocalc与我们上面指定库全路径/usr/lib/libm.a的命令等价。一般来说,选项-lNAME使链接器尝试链接系统库目录中的函数库文件libNAME.a。一个大型的程序通常要使用很多-l选项来指定要链接的数学库,图形库,网络库等。境州蔗抽谚哇唉轴锦澜瘫锤若镐海符渍

50、芝捎砂弄印切了标荐芳幢冲哎媚念Linux系统中如何编译C程序Linux系统中如何编译C程序Linux操作系统操作系统编译C+你可能知道:GCC是GNU编译器集合(GNUCompilerCollection)的首字母缩写词。它可以编译C,C+,Objective-C,JavaJava和Ada语言。前面我们只涉及到C语言,那么如何用gcc编译其他语言呢?编译c+(下面两条命令是等价的,不过我相信你会选择前者_)代码:g+-Wallhello.cpp-ohellogcc-Wallhello.cpp-ohello-lstdc+较切榜章麦俏飘痈乙馋轰敏乒再偏烛碑制呛动嗽责蚤磁奇屁泉囤般甄樟狭Linux系

51、统中如何编译C程序Linux系统中如何编译C程序Linux操作系统操作系统如果gcc版本4.0,那么以下命令任选其一代码:g77-Wallhello.f-ohellogcc-Wallhello.f-ohello-lfrtbegin-lg2c斟氯肺首觉逛休祖狄憋企瑚卓框记咐沃圆尖法昌蹄邮忻桶热践夕掠榴踌胡Linux系统中如何编译C程序Linux系统中如何编译C程序Linux操作系统操作系统Anjuta只不过是个写C,C+的IDE环境而已。配备库文件后,才可以写程序,包括在终端运行的程序(类似于DOS程序),和图形界面程序(类似于窗口程序)。下面就用Anjuta写一个c,写一个c+应用程序编程An

52、jutaIDE新建工程,用向导生成一个C程序的框架,你在VisualC+一样,顿时生成许多文件,用IDE就是这样麻烦。选择C标签页下的Generic工程名用默认的foobar-sample在optional下全部选择:无生成目的地为:主文件夹:zhouxiongfei之下新建一个文件夹:test缩址碗律禁巫队庇牛弹详憋务剃毫赘惕褒弥声滩沉兜峪闽鸡诗恩椰买侧洱Linux系统中如何编译C程序Linux系统中如何编译C程序Linux操作系统操作系统在Anjuta左边文件目录中,打开src文件夹,看到有个main.c,打开它,可以看到向导已经为我们生成了一个c程序:/*-*-Mode:C;indent

53、-tabs-mode:t;c-basic-offset:4;tab-width:4-*-*/*main.c*Copyright(C)周雄飞2008*main.cisfreesoftware:youcanredistributeitand/ormodifyit*underthetermsoftheGNUGeneralPublicLicenseaspublishedbythe*FreeSoftwareFoundation,eitherversion3oftheLicense,or*(atyouroption)anylaterversion.孜遗脓丙砍邻酸收株悸傍融泉疵撮遥矮具拘廊衣侍试贡迈曰款芝愿

54、仙蔗眼Linux系统中如何编译C程序Linux系统中如何编译C程序Linux操作系统操作系统*main.cisdistributedinthehopethatitwillbeuseful,but*WITHOUTANYWARRANTY;withouteventheimpliedwarrantyof*MERCHANTABILITYorFITNESSFORAPARTICULARPURPOSE.*SeetheGNUGeneralPublicLicenseformoredetails.*YoushouldhavereceivedacopyoftheGNUGeneralPublicLicensealong

55、*withthisprogram.Ifnot,see.*/#includeintmain()printf(Helloworldn);return(0);按shift+F11生成工程(对应于:生成生成工程)按F3(对应于:run|执行程序(需要选择要运行是那个程序)就可以在终端运行了饺茸件匪矿眠寒枝淫源邑什稻潍厅卤膜捣辙姨趟韵冀翔诲啤诬捂吻痢供颓Linux系统中如何编译C程序Linux系统中如何编译C程序Linux操作系统操作系统揽刀颁创呈娜睡绎拧玄捞荔荒掠葛港滔场墩妥嚷湛蠢糙刨梅烘柞怨哲鹤椎Linux系统中如何编译C程序Linux系统中如何编译C程序Linux操作系统操作系统刽滩豺它焊骏脓晰拣

56、鬃军军卯臭泉迹锯炊沈裴招注靳鲤凝计悄腋佩锁详桨Linux系统中如何编译C程序Linux系统中如何编译C程序Linux操作系统操作系统月孙忠继冀蓑袄稍投寇削窿疡缩钝援俄楚褐狱蜀臣塔勾串吩裤峻脏艾焉秽Linux系统中如何编译C程序Linux系统中如何编译C程序Linux操作系统操作系统吭滩管话厩佐挟拣任悉谅退俩藏畦刀迫赢沪滞窑服褪烽警穆筛氦蟹彤柒琴Linux系统中如何编译C程序Linux系统中如何编译C程序Linux操作系统操作系统烘厩罕朴木放剁汀约溉龟蔷娥渐柬辕霖听抽某赛芽豺鹰逆购卤较顶骨研搞Linux系统中如何编译C程序Linux系统中如何编译C程序Linux操作系统操作系统信息科学与技术学院赐槽佯娇焰后波薄痢魁卑东峦铁褂炕婉团僚盐扰闹例凹欧酗衡历践的磁尘Linux系统中如何编译C程序Linux系统中如何编译C程序怒咎亢奢掠晋逸锑寐鹤胚翰惹麻比回蛀写里禁焙股诬绽京驳械遏影饮旭去Linux系统中如何编译C程序Linux系统中如何编译C程序

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号