信息科学与技术大学Linux操作系统上课班主任:**上课时间:2009年夏季Linux操作系统Linux系统中怎样编译C程序•登入后用vi写一个C程序:过程如下:•viHelloLinux.c回车•步入后选择一种输入方法(a,i,o);•#include•main()•{•printf(”HelloLinux!n”);•}Linux操作系统Linux系统中怎样编译C程序•用Vi输入程序时,更改linux如何编译c程序,编辑代码很复杂,可以用“application‖中的“附件”的“文本编辑器”进行编辑•#include•main()•{•printf(”HelloLinux!n”);•}Linux操作系统•写完程序后Esc并保存退出(:w―保存”:q―退出”)•之后用gcc编译:•gccHelloLinux.c回车•用ls查看都会看见一个HelloLinux.out文件,下边我们运行它;•。/HelloLinux.out回车•将会显示•Hellolinux!Linux操作系统linux下对C代码的编译•在linux下对C代码的编译时非常简单的,然而,不能忘掉步骤。•要步入自己所要的目录:cd文件名•假如要是返回上级目录:cd……•要查看下边的子目录:ls或则ll•完善新目录:mkdir文件名•删掉空目录:rmdir文件名非空的rm•编译:gcc-otesttest.c•输出:。
/testLinux操作系统Linux平台下关于GCC编译及使用的方式•编译:•第一步、是进行预编译,使用-E参数可以让GCC在预处理结束后停止编译过程:•gcc-Ehello.c-ohello.i•预处理的宏定义插入到hello.i中•第二步、是将hello.i编译为目标代码,这可以通过使用-c参数来完成:•gcc-chello.i-ohello.o•也可以通过源文件直接生成•gcc-chello.c•第三步、是将生成的目标文件链接成可执行文件:•gcchello.o-ohello•也可以通过源文件直接生成•gcc-ohellohello.cLinux操作系统•警告:•1、-pedantic选项,这么使用了扩充句型的地方将形成相应的警告信息•2、-Wall使用它还能使GCC形成尽可能多的警告信息•3、-Werror,它要求GCC将所有的警告当作错误进行处理•库依赖:•1、Linux下的大多数函数都默认:•头文件放在/usr/include/目录下•而库文件则放在/usr/lib/目录下Linux操作系统•2、GCC在编译时必须有自己的办法来查找所须要的头文件和库文件。•-I选项可以向GCC的头文件搜索路径中添加新的目录。
•诸如,假如在/home/xiaowp/include/目录下有编译时所须要的头文件,为了让GCC才能顺利地找到它们,就可以使用-I选项:•gcc-otesttest.c-I/home/xiaowp/include•-L选项向GCC的库文件搜索路径中添加新的目录•诸如,假如在/home/xiaowp/lib/目录下有链接时所须要的库文件libfoo.so,为了让GCC才能顺利地找到它,可以使用下边的命令•gcc-otesttest.c-L/home/xiaowp/lib-lfoo•值得好好解释一下的是-l选项,它指示GCC去联接库文件libfoo.so.Linux操作系统•Linux下的库文件在命名时有一个约定,那就是应当以lib三个字母开头,因为所有的库文件都遵守了同样的规范,因而在用-l选项指定链接的库文件名时可以省去lib三个字母,也就是说GCC在对-lfoo进行处理时,会手动去链接名为libfoo.so的文件。•-static选项linux修改文件名,强制使用静态链接库•假如在/home/xiaowp/lib/目录下有链接时所须要的库文件libfoo.so和libfoo.a•为了让GCC在链接时只用到静态链接库,可以使用下边的命令:•gcc-otesttest.c-L/home/xiaowp/lib-static-lfoo•选项-O可以告诉GCC同时减少代码的厚度和执行时间,其疗效等价于-O1.•在这一级别上才能进行的优化类型即使取决于目标处理器,但通常还会包括线程跳转(ThreadJump)和延后退栈(DeferredStackPops)两种优化。
Linux操作系统•选项-O2告诉GCC不仅完成所有-O1级别的优化之外,同时还要进行一些额外的调整工作,如处理器指令调度等。•选项-O3则不仅完成所有-O2级别的优化之外,还包括循环展开和其它一些与处理器特点相关的优化工作。•一般来说,数字越大优化的等级越高,同时也就意味着程序的运行速率越快。•许多Linux程序员都喜欢使用-O2选项,由于它在优化宽度、编译时间和代码大小之间linux qq,取得了一个比较理想的平衡点。•time./test查看程序执行时间•优化其实能否给程序带来更好的执行性能,但在如下一些场合中应当避开优化代码:Linux操作系统•程序开发的时侯优化等级越高,消耗在编译上的时间就越长,因而在开发的时侯最好不要使用优化选项,只有到软件发行或开发结束的时侯,才考虑对最终生成的代码进行优化。•资源受限的时侯一些优化选项会降低可执行代码的容积,假如程序在运行时才能申请到的显存资源十分紧张(如一些实时嵌入式设备),那就不要对代码进行优化,由于由这带来的负面影响可能会形成极其严重的后果。•跟踪调试的时侯在对代码进行优化的时侯,个别代码可能会被删掉或改写,或则为了取得更佳的性能而进行重组,因而使跟踪和调试显得异常困难。
•加速:使用管线取代编译中临时文件,•-pipe加速编译•gcc-pipefoo.c-ofoo•Linux操作系统GCC常用选项•-c通知GCC取消链接步骤,即编译源码并在最后生成目标文件;•-Dmacro定义指定的宏,使它还能通过源码中的#ifdef进行检验;•-E不经过编译预处理程序的输出而输送至标准输出;•-g3获得有关调试程序的详尽信息,它不能与-o选项联合使用;•-Idirectory在包含文件搜索路径的起点处添加指定目录;•-llibrary提示链接程序在创建最终可执行文件时包含指定的库;•-O、-O2、-O3将优化状态打开,该选项不能与-g选项联合使用;•-S要求编译程序生成来自源代码的汇编程序输出;•-v启动所有警报;•-Wall在发生警报时取消编译操作,正式警报看作是错误;•-Werror在发生警报时取消编译操作,即把报案当成是错误;•-w严禁所有的报案。Linux操作系统建立linux下IDE环境--Eclipse•Eclipse是一个开放源代码的、基于Java的可扩充开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件建立开发环境。
辛运的是,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操作系统建立linux下IDE环境--Eclipse•Eclipse是知名的跨平台的自由集成开发环境(IDE)。最初主要拿来Java语言开发,并且目前亦有人通过插件使其作为其他计算机语言例如C++和Python的开发工具。Eclipse的本身只是一个框架平台,并且诸多插件的支持促使Eclipse拥有其他功能相对固定的IDE软件很难具有的灵活性。许多软件开发商以Eclipse为框架开发自己的IDE。Eclipse最初由OTI和IBM两家公司的IDE产品开发组创建,起始于1999年4月。
IBM提供了最初的Eclipse代码基础,包括Platform、JDT和PDE。目前由IBM牵头,围绕着Eclipse项目早已发展成为了一个庞大的Eclipse联盟Linux操作系统建立linux下IDE环境--Eclipse•有150多家软件公司参与到Eclipse项目中,其中包括Borland、RationalSoftware、RedHat及Sybase等。Eclipse是一个开发源码项目,它虽然是VisualAgeforJava的取代品,其界面跟以前的VisualAgeforJava差不多,但因为其开放源码,任何人都可以免费得到,并可以在此基础上开发各自的插件,因而越来越受人们关注。近日还有包括Oracle在内的许多大公司也纷纷加入了该项目,并声称Eclipse将来能成为可进行任何语言开发的IDE集大成者,使用者只需下载各类语言的插件即可。Linux操作系统建立linux下IDE环境--Eclipse•其实大多数用户很乐于将Eclipse当成JavaIDE来使用,但Eclipse的目标除了限于此。Eclipse还包括插件开发环境(Plug-inDevelopmentEnvironment,PDE),这个组件主要针对希望扩充Eclipse的软件开发人员,由于它容许她们建立与Eclipse环境无缝集成的工具。
因为Eclipse中的每样东西都是插件,对于给Eclipse提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所。Linux操作系统建立linux下IDE环境--Eclipse•这些平等和一致性并除了限于Java开发工具。虽然Eclipse是使用Java语言开发的,但它的用途并不限于Java语言;诸如,支持例如C/C++、COBOL和Eiffel等编程语言的插件早已可用,或预计会推出。Eclipse框架还可拿来作为与软件开发无关的其他应用程序类型的基础linux如何编译c程序,例如内容管理系统。基于Eclipse的应用程序的突出反例是IBM的WebSphereStudioWorkbench,它构成了IBMJava开发工具系列的基础。诸如,WebSphereStudioApplicationDeveloper添加了对JSP、servlet、EJB、XML、Web服务和数据库访问的支持。近来版本3.4(Ganymede)/2008年6月25日Linux操作系统建立linux下IDE环境--Eclipse•Eclipse的主要组成Eclipse是一个开放源代码的软件开发项目,专注于为高度集成的工具开发提供一个全功能的、具有商业品质的工业平台。
它主要由Eclipse项目、Eclipse工具项目和Eclipse技术项目三个项目组成,具体包括四个部份组成——EclipsePlatform、JDT、CDT和PDE.JDT支持Java开发、CDT支持C开发、PDE拿来支持插件开发,EclipsePlatform则是一个开放的可扩充IDE,提供了一个通用的开发平台。它提供建造块和构造并运行集成软件开发工具的基础。EclipsePlatform容许工具建造者独立开发与他人工具无缝集成的工具因而无须区分一个工具功能在那里结束,而另一个工具功能在那里开始。Linux操作系统建立linux下IDE环境--Eclipse•EclipseSDK(软件开发者包)是EclipsePlatform、JDT和PDE所生产的组件合并,它们可以一次下载。这种部份在一起提供了一个具有丰富特点的开发环境,容许开发者有效地建造可以无缝集成到