- 1、本文档共25页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux下C程序设计
第六章 嵌入式Linux编程
一.GNU/Linux平台C程序开发过程
在GNU/Linux环境下一个C程序从编辑到执行结束主要经历以下几个步骤,我们以经典的helloworld程序为例,详细介绍GNU/Linux平台下软件开发中各种工具的功能以及使用方法。
本文以我们最常见的hello, world!为例。以下是一个由C源代码转化为可执行文件的过程:
对源代码文件中的文件包含(include)、预编译语句(如宏定义define等)进行分析。接着调用cc1进行编译,这个阶段根据输入文件生成以.o为后缀的目标文件。汇编过程是针对汇编语言的步骤,调用as进行工作,一般来讲,.S为后缀的汇编语言源代码文件和汇编、.s为后缀的汇编语言文件经过预编译和汇编之后都生成以.o为后缀的目标文件。当所有的目标文件都生成之后,gcc就调用ld来完成最后的关键性工作,这个阶段就是连接。在连接阶段,所有的目标文件被安排在可执行程序中的恰当的位置,同时,该程序所调用到的库函数也从各自所在的档案库中连到合适的地方
可执行程序的执行过程:生成可执行程序后,由操作系统调度完成执行,执行中的程序称之为进程。程序转化为进程的步骤如下:
1.? 内核将程序读入内存,为程序镜像分配内存空间。
2 ? 内核为该进程分配进程标志符(PID)。
3.? 内核为该进程保存PID及相应的进程状态信息。
经过上述步骤,可执行程序转变为进程,即可以被调度执行,得出运行结果。
二.Linux系统下完整开发环境构成
通过以上分析了解了C程序开发的整个过程,在整个开发过程中主要用到编辑器,编译器,调试器函数库和系统头文件等。所以一般情况下说Linux环境系统开发完整工具链主要包括
编辑器:选择vi(基本上任何版本都拥有vi,且用法基本一致,考虑到兼容性,选择vi编写源代码)
? 编译器:选择GNU c/c++ 编译器gcc
? 调试器:应用广泛的gdb(编写程序时的语法错误和逻辑错误调试和跟踪)
? 函数库:glibc
? 系统头文件:glibc_header?1.编译器gcc概述
GNU CC(简称gcc)是GNU项目中符合ANSI C标准的编译系统,能够编译用C、C++、Object C、Jave等多种语言编写的程序。gcc又可以作为交叉编译工具,它能够在当前CPU平台上为多种不同体系结构的硬件平台开发软件,非常适合在嵌入式领域的开发编译,如常用的arm-linux-gcc交叉编译工具。以下是gcc支持编译的源文件的后缀及其解释:
? .c为后缀的文件,c语言源代码文件
? .h为后缀的文件,是程序所包含的头文件
? .i为后缀的文件,是已经预处理过的c源代码文件
? .o为后缀的文件,是编译后的目标文件(连接后生成可执行文件)
? .s为后缀的文件,是汇编语言源代码的文件函数库glibc
? 要构架一个完整的c开发环境,glibc是必不可少的? glibc-2.0.6.tar.gz
? glibc-linuxthreads-2.0.6.tar.gz
? glibc-localledate-2.0.6.tar.gz(国际化文件)
? glibc-crypt-2.0.6.tar.gz(加密文件)
glibc是提供系统调用和基本函数的c库,如:open、malloc、printf等等,所有动态连接的程序都要用到它。
系统头文件glibc_header
? 缺少了系统头文件的话,很多用到系统功能的c程序将无法编译。? cpp-2.96-110.i386.rpm
? binutils-.2-11.i386.rpm
? glibc ......... .rpm
? gcc-2.96-110.i386.rpm
? make-3.79.1-8.i386.rpm
三.gcc的使用方法
1.gcc基本用法
gcc最基本的用法是:gcc [options] [filenames]其中,options就是编译器所需要的参数,filenames给出相关的文件名称,gcc编译器的调用参数大约有100多个,其中多数参数我们可能根本就用不到,这里只介绍其中最基本、最常用的参数-c??? :只编译,不链接成为可执行文件。编译器只是由输入的 .c 等源代码文件生成 .o 为后缀的目标文件,通常用于编译不包含主程序的子程序文件。-o output_filename??:确定输出文件的名称为output_filename。同时这个名称不能和源文件同名。如果不给出这个选项,gcc就给出默认的可执行文件 a.out 。-g: 产生符号调试工具(GNU的 gdb)所必要的符号信息。想要对源代码进行调试,就必须加入这个选项。-O:(大写的o) 对程序进行优化编译、链接。采用这个选项,整个源代码会在编译、链接过程中进
文档评论(0)