欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > PPT文档下载
     

    第二章LinuxC编程基础--GCC.ppt

    • 资源ID:2121791       资源大小:289.51KB        全文页数:33页
    • 资源格式: PPT        下载积分:6
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要6
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第二章LinuxC编程基础--GCC.ppt

    第二章 Linux C编程基础-GCC,主要内容,gcc简介 利用gcc编译c程序 利用make工具简化编译过程 调试,开发工具环境,开发工具:编辑工具、编译工具和调试工具,甚至配置工具和项目管理工具。 开发环境: (1)基于文本的:vim+gcc+gdb+make (2)集成开发平台:Eclipse+CDT、,基于文本的开发平台,编辑工具:vim,emacs。 编译工具:gcc,要使用指令完成编译,比如:gcc o hello hello.c 调试工具:gdb。 项目管理工具:make ,编写makefile文档来完成相关的一系列gcc指令。,gcc简介,名称: GNU project C and C+ Compiler GNU Compiler Collection gcc是一个全功能的 ANSI C 兼容编译器,它是所有UNIX系统可用的C编译器。 gcc是可以在多种硬体平台上编译出可执行程序的超级编译器,其执行效率与一般的编译器相比平均效率要高20%30%。,gcc简介,对C/C+编译的控制 预处理:对源代码文件中的文件包含(include)、预编译语句(如宏定义define等)进行分析。 编译:就是把C/C+代码“翻译”成汇编代码。 汇编:将第二步输出的汇编代码翻译成符合一定格式的机器代码,生成以.s为后缀的目标文件。 链接:将上步生成的目标文件和系统库的目标文件和库文件链接起来,最终生成了可以在特定平台运行的可执行文件。,编译过程的四个阶段:,gcc的使用,基本使用格式 $ gcc 选项 文件名 例:,/text.c #include void main() printf(“Hello World!n”); ,$gcc test.c $./a.out Hello World! 或 $gcc -o test test.c $./test Hello World!,常用选项及含义,gcc的常用选项,gcc的常用选项,gcc的常用选项,-Wall:允许所有有用的警告(建议总是使用该选项),/* bad.c */ #include int main(int argc, char *argv) printf(“Two plus two is %fn”, 4); return 0; ,例1: $ gcc bad.c o bad 例2: $ gcc Wall bad.c o bad,13,例1:,-o:定义输出文件,例:编译多个源文件 $ gcc -Wall main.c hello.c -o helloworld,/* hello.h */ void hello (const char * name);,/* hello.c */ #include #include “hello.h“ void hello (const char * name) printf (“Hello, %s!n“, name); ,/* main.c */ #include “hello.h“ int main (int argc, char *argv) hello (“world“); return 0; ,14,例2:,-l:链接外部库文件,库是已经编译好并能被链接入程序的对象文件的集合。库中提供一些最常用的系统函数,比如象C的数学库中求平方根函数sqrt。,库通常被存储在扩展名为“.a”或“.so”的特殊归档文件中。,C标准库自身存放在“/usr/lib/libc.a”中,包含ANSI/ISO C标准指定的各个函数,是默认自动加载的库。,/* sqrt.c */ #include # include int main(int argc, char *argv) double r = sqrt(3.0); printf (“(“The square root of 3.0 is %fn“, r); return 0; ,例: $ gcc -Wall sqrt.c -o sqrt,ccbR6Ojm.o: In function main: ccbR6Ojm.o(.text+0x19): undefined reference to sqrt,15,例:,-l:链接外部库文件,函数sqrt()并不定义在源程序中或默认的C库“libc.a”中。,为了使得编译器能把sqrt()函数链接到主程序“sqrt.c”,需要提供“libm.a”库。,例: $ gcc -Wall sqrt.c /usr/lib/libm.a -o sqrt,/usr/lib/libm.a,-lm,$ gcc -Wall sqrt.c -lm -o sqrt,编译器选项“-lNAME”试图链接标准库目录下的文件名为“libNAME.a”中的对象文件,16,例:,函数库的链接次序,原则:包含函数定义的库应该出现在任何使用到该函数的源文件和对象文件之后,例1: $ gcc -Wall -lm sqrt.c -o sqrt (incorrect) $ gcc -Wall sqrt.c -lm -o sqrt (correct),例2: $ gcc -Wall sqrt.c -lglpk -lm -o sqrt,程序“sqrt.c”用到了GNU Linear Programming库“libglpk.a”,而该库又依次用到数学库“libm.a”,那么应当这么编译:,17,例:,-L:设置库文件的搜索路径,如果链接时用到的库不在gcc用到的标准库目录中,就会报这样的错。,/usr/local/lib/ /usr/lib/,例: $ gcc -Wall -L/tmp/lib sqrt.c -lm -o sqrt,-L/tmp/lib,18,例:,-I:设置头文件的搜索路径,如果头文件不在gcc用到的标准include文件路径中,就会报这样的错。,/usr/local/include/ /usr/include/,例: $ gcc -Wall -I/tmp/include sqrt.c -lm -o sqrt,-I/tmp/include,19,例:,gcc文件扩展名规范,gcc可以根据文件扩展名执行操作,使用gcc编译代码,源代码,示例源程序hello.c #include int main(void) printf(“hello gcc!rn“); return 0; ,生成预处理文件,命令:E选项使得gcc生成预处理文件后停止。 $gcc E hello.c o hello.i,预处理文件hello.i的部分内容 extern void funlockfile (FILE *_stream) ; # 679 “/usr/include/stdio.h“ 3 # 2 “hello.c“ 2 int main(void) printf(“hello gcc!n“); return 0; ,生成汇编文件,命令 $gcc S hello.c o hello.s,汇编文件hello.s的部分内容 main: pushl %ebp movl %esp, %ebp addl $16, %esp movl $0, %eax leave ret “,生成二进制文件,生成目标文件 命令: $gcc c hello.c o hello.o 生成可执行文件 命令: $gcc hello.c o hello 运行程序 $./hello hello gcc!,利用gcc开发C语言程序,开发C/C+程序的基本步骤是:首先利用文本编辑工具编写源代码,然后将源代码作为输入文件,通过使用不同的控制参数控制gcc实现代码的预处理、编译、汇编、链接等步骤,生成最终的可执行文件。,简单C语言程序my_app.c,#include #define N 10 Void greeting(char *name); int main(void) char nameN; printf(“Your Name,Please:“);,scanf(“%s“,name); greeting(name); return 0; void greeting (char * name) printf(“Hello %s!rn“,name); ,使用什么命令生成可执行文件?,$gcc my_app.c o my_app,多个文件的C程序,为了方便代码重用,通常将主函数和其他函数放在不同文件中的方法。 每个函数都有函数声明(函数头)和函数实现(函数体)两部分组成。 函数头一般放在头文件中(*.h)中,而函数的定义文件放在实现文件(*.c、*.cpp)中,编译多个文件,假设3个文件保存在同一个目录下面,如果还使用: 命令: $gcc my_app.c o my_app 会编译通过吗?,编译多个文件,目录结构(1) 编译命令 $ gcc my_app.c greeting.c o my_app 目录结构(2) 编译方式(1) $ gcc my_app.c functions/greeting.c o my_app -I functions,编译多个文件,目录结构(2) 编译方式(2) 分步编译 命令: 1、$gcc -c my_app.c -I functions 2、$gcc -c functions/greeting.c 3、$gcc my_app.o greeting.o o my_app 思路: 编译每一个.c文件,得到.o的目标文件; 将每一个.o的目标文件链接成一个可执行的文件;,GNU C 扩展简介,gcc使用long long数据类型提供64位存储单元。 内联函数:要求内联函数足够短小,使得能够在代码中展开,同时编译器检查函数类型。要使用-O选项。-finline-functions. 使用attribute关键字指明代码相关信息方便优化。 gcc对case做了扩展。case语句可以对应一个范围,在case关键字后列出范围的两个边界值,用“空格省略号空格”分隔。,

    注意事项

    本文(第二章LinuxC编程基础--GCC.ppt)为本站会员(本田雅阁)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开