




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第三章、Linux下C编程熟悉Linux系统下的开发环境熟悉gcc编译器的基本原理熟练使用gcc编译器的常用选项熟悉makefile基本原理及语法规范本章的主要内容3.3 gcc编译器3.5 make工程管理器Code:Blocks IDECode:blocks 操作界面3.3 gcc编译器gcc编译器GCC(GNU Compiler Collection)是一套功能强大、性能优越的编程语言编译器,它是GNU计划的代表作品之一。GCC是Linux平台下最常用的编译器, GCC原名为GNU C Compiler,即GNU C语言编译器,随着GCC支持的语言越来越多,它的名称也逐渐变成了GNU C
2、ompiler Collection。编译c程序通常用gcc指令,编译c+程序通常用g+指令,两者区别在于默认引用库不同。gcc编译过程gcc常用选项GCC编译过程使用Gcc编译main.c程序。#includeint main()printf(hello! embeded system!n);(1)gcc main.c(2)gcc -o hello main.c(3)gcc -g o hello_dbg main.c(4)gcc -O2 -o hello_O2main.cgcc -库选项函数库分为静态库和动态库两种:静态库是一系列的目标文件(.o文件)的归档文件(文件名格式为libname.
3、a),如果在编译某个程序时链接静态库,则链接器将会搜索静态库,从中提取出它所需要的目标文件并直接拷贝到该程序的可执行二进制文件(ELF格式文件)之中;动态库(文件名格式为libname.so.主版本号.次版本号.发行号)在程序编译时并不会被链接到目标代码中,而是在程序运行时才被载入。Linux函数库的创建与使用(1)/* unsgn_pow.c:库程序 */unsigned long longunsgn_pow(unsigned int x, unsignedint y)unsigned long long res = 1;if (y = 0)res = 1;else if (y = 1)re
4、s = x;elseres = x * unsgn_pow(x, y -1);return res;/* pow_test.c */#include #include int main(int argc, char *argv)unsigned int x, y;unsigned long long res;if (argc 3) | (sscanf(argv1, %u, &x) != 1)|(sscanf(argv2, %u, &y) != 1)printf(Usage: pow base exponentn);exit(1);res = unsgn_pow(x, y);printf(%u
5、%u = %un, x, y, res); exit(0);静态库制作及调用$ gcc -c unsgn_pow.c$ ar rcsv libpow.a unsgn_pow.o a - unsgn_pow.o(输出)$ gcc -o pow_test pow_test.c -L. lpow$ ./pow_test 2 10 2 10 = 1024动态库$ gcc -fPIC -Wall -c unsgn_pow.c$ gcc -shared -o libpow.so unsgn_pow.o$ gcc -o pow_test pow_test.c -L. lpow在运行可执行程序之前,需要注册动
6、态库的路径名。其方法有几种:修改/etc/ld.so.conf文件,或者修改LD_LIBRARY_PATH环境变量,或者将库文件直接拷贝到/lib或者/usr/lib目录下(这两个目录为系统的默认的库路径名)。$ cp libpow.so /lib$ ./pow_test 2 10 2 10 = 1024静态库与动态库的比较动态库只有在使用它的程序执行时才被链接使用,而不是将需要的部分直接编译入可执行文件中,并且一个动态库可以被多个程序使用故可称为共享库,静态库将会整合到程序中,因此在程序执行时不用加载静态库。 从而可知,链接到静态库会使你的程序臃肿,并且难以升级,但是可能会比较容易部署。而链
7、接到动态库会使你的程序轻便,并且易于升级,但是会难以部署。工程编译的过程.h文件.h文件.h文件.c文件.c文件.c文件编译 gcc -c.o文件.a文件.o文件.o文件链接 gcc -o 可执行文件.so文件执行3.5 make工程管理器make工程管理器工程管理器,顾名思义,是指管理较多的文件Make工程管理器也就是个“自动编译管理器”,这里的“自动”是指它能构根据文件时间戳自动发现更新过的文件而减少编译的工作量,同时,它通过读入Makefile文件文件的内容来执行大量的编译工作 .make会按用户定义的配置文件Makefile调用gcc等命令对源代码进行编、链接生成目标可执行文件。mak
8、efile基本结构(1)makefile是make读入的惟一配置文件,因此本节的内容实际就是讲述makefile的编写规则。在一个makefile中通常包含如下内容:需要由make工具创建的目标体(target),通常是目标文件或可执行文件;要创建的目标体所依赖的文件(dependency_file);创建每个目标体时需要运行的命令(command),这一行必须以制表符(tab键)开头。makefile基本结构(2)makefile格式Makefile的例子使用makefiletarget: dependency_filescommand /* 该行必须以tab键开头*/hello.o: he
9、llo.c hello.hgcc c hello.c o hello.o$ make hello.ogcc c hello.c o hello.o$ lshello.c hello.h hello.o makefile多目标的makefileMakefile的内容:david : kang.o yul.ogcc kang.o yul.o o myprogkang.o : kang.c kang.h head.hgcc Wall O g c kang.c o kang.o yul.o : yul.c head.hgcc Wall O g c yul.c o yul.oMakefile的执行:(1
10、) make david(2) make kang.o(3) make yul.o创建和使用makefile变量用来代替一个文本字符串变量定义的两种方式递归展开方式VAR=var简单方式 VAR:=var变量使用$(VAR)OBJS = kang.o yul.oCC = gccCFLAGS = -Wall -O -gdavid : $(OBJS)$(CC) $(OBJS) -o davidkang.o : kang.c kang.h$(CC) $(CFLAGS) -c kang.c -o kang.oyul.o : yul.c yul.h$(CC) $(CFLAGS) -c yul.c -o
11、yul.omakefile变量变量种类用户自定义变量预定义变量自动变量环境变量OBJS = kang.o yul.oCC = gccCFLAGS = -Wall -O -gdavid : $(OBJS)$(CC) $ -o $kang.o : kang.c kang.h$(CC) $(CFLAGS) -c $ -o $yul.o : yul.c yul.h$(CC) $(CFLAGS) -c $ -o $makefile中常用的预定义变量makefile中常见的自动变量和环境变量makefile规则makefile的规则是make进行处理的依据,它包括了目标体、依赖文件及其之间的命令语句。普通
12、规则隐含规则模式规则隐式规则隐含规则能够告诉make怎样使用传统的规则完成任务,这样,当用户使用它们时就不必详细指定编译的具体细节,而只需把目标文件列出即可例子OBJS = kang.o yul.oCC = gccCFLAGS = -Wall -O -gdavid : $(OBJS)$(CC) $ -o $模式规则模式规则是用来定义相同处理规则的多个文件的。它不同于隐式规则,隐式规则仅仅能够用make默认的变量来进行操作,而模式规则还能引入用户自定义变量,为多个文件建立相同的规则,从而简化了makefile的编写模式规则的格式类似于普通规则,这个规则中的相关文件前必须用“%”标明OBJS =
13、kang.o yul.oCC = gccCFLAGS = -Wall -O -gdavid : $(OBJS)$(CC)$ -o$%.o : %.c$(CC) $(CFLAGS) -c $ -o $make的命令行选项习题1.编写MakeFile文件,该文件能够编译出在PC平台运行的可执行代码run,源代码文件为下图所示文件包含文件main.cstdio.h, func1.h, func2.hfunc1.cfunc1.hfunc2.cfunc2.h第一步:编写makefile文件run: main.o func1.o func2.ogcc -o run main.o func1.o func1
14、.o main.o: main.c func1.h func2.h stdio.h gcc -c main.c -o main.ofunc1.o : func1.c func1.hgcc -c func1.c -o func1.o func2.o: func2.c func2.hgcc -c func2.c -o func2.o第二步:make第三步:执行程序,检测结果。./run习题2 假定你在目录/home/arm下有一个C程序,他由几个单独的文件组成,而这几个文件又分为包含了其他文件,如下图所示文件包含文件main.cstdio.h, table.hlist.clist.hsymbol.
15、csymbol.htable.ctable.htable.hsymbol.h, list.h完成下列任务:(1)编写makefile文件,最终的目标文件为hello(交叉编译器为arm-linux-gcc)(2)给出程序编译执行步骤第一步:编写makefile文件hello: main.o list.o symbol.o table.ogcc main.o list.o symbol.o table.o -o hellomain.o: main.c table.h symbol.h list.hgcc c main.c -o main.olist.o: list.c list.hgcc -c
16、list.c -o list.osymbol.o: symbol.c symbol.hgcc -c symbol.c -o symbol.otable.o: table.c table.h symbol.h list.hgcc -c table.c -o table.oclean:rm hello *.o第二步:make第三步:执行程序,检测结果。./hello习题2.编写MakeFile文件,该文件能够编译出在arm-linux平台运行的可执行代码,源代码文件为voltageM.c,生成文件voltageMEXEC = voltageM SRC = voltageM.cHOST_CC = g
17、ccTARGET_CC = arm-linux-gcc CC = $TARGET_CCINC = -I.CFLAGS = $INC -gall:$EXEC$EXEC : $SRC$CC $CFLAGS -o $ $SRC .PHONY : cleanclean :-rm -f $EXEC习题4.现在需要编译一个TCP网络通信的程序,包括服务器(运行于PC linux平台)和客户端(运行于ARM linux 平台)。服务器的源代码 server.c server.h 客户端的源代码 client.c client.h试着编写一个MakeFile文件能够一次将server和client的程序编译完成。EXEC1 = server EXEC2 = client SRC1 = server.c SRC2 = client.c
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025至2030中国男士衬衣行业发展分析及竞争格局与发展趋势预测报告
- 2025至2030中国生姜产品行业市场占有率及投资前景评估规划报告
- 2025至2030中国甑炭行业需求动态及发展前景研究报告
- 点菜技巧培训
- 新人法律培训
- 商业成功背后的学生动机分析
- 校园智慧体育设施的建设现状及挑战
- 情绪智力在教育心理学中的核心地位
- 医疗行业中的科技应用与师资培训模式研究
- 商业环境下的教育创新与青少年运动培训的融合研究
- 智慧农业项目建设方案
- 人工智能模拟题
- 2024年下半年江苏南通启东市部分事业单位选调工作人员14人易考易错模拟试题(共500题)试卷后附参考答案
- 教师资格考试小学美术面试试题及答案指导(2025年)
- 住家保姆合同协议书模板
- AI如何赋能艺术教育-笔记
- DB11T 485-2020 集中空调通风系统卫生管理规范
- 《人力资源管理》全套教学课件
- Unit 6 Craftsmanship Reading 教案-2023-2024学年中职英语高教版(2023修订版)基础模块2
- 2023-2024学年山东省菏泽市东明县八年级(下)期末数学试卷(含答案)
- 初高中物理衔接讲座(初高中物理对比)
评论
0/150
提交评论