预览加载中,请您耐心等待几秒...
1/9
2/9
3/9
4/9
5/9
6/9
7/9
8/9
9/9

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

06.20 Linux编译器 /NUMPAGES9 编译器 引言 GVS 并行版本控制系统 Gnu C C GCC Gnu debug HYPERLINK"http://www.cygwin.com"www.cygwin.comHYPERLINK"http://www.mingw.org"www.mingw.orgHYPERLINK"http://www.bloodshed.com"www.bloodshed.com GUN C 编译器 1.gcc c程序文件名 2.gcc 默认的可执行文件名为a.out 3.(1)编译错误[语法问题] (2)连接错误 函数调用出错 a:函数名写错ex:printf print b:使用了某一个库中的函数而在连接时没有进行指定连接库 4.-o:指定生成的可执行文件名 gcc–ohellohello.c 5.修改环境变量 (/etc/profile)末行加入exportPATH=$PATH:. 6. (1)预处理器作用:将.c文件进行宏代换、头文件包含生成一个新 的c源程序 (2)编译器:将预处理过的c代码转换为汇编代码 (3)组译器:将汇编代码转换为目标文件(二进制) (4)链接器:将目标文件与启动模块、函数库进行链接生成可执行 文件 7.-E只预处理,将预处理结果输出的标准输出上stdout -S只进行到编译阶段,将编译生成的汇编代码保存为与.c主文件 名相同,扩展名为.s的文件中ex:gcchello.c-S -c只进行到组译阶段,将组译后的目标文件保存为.o的文件,保存为与.c主文件名相同扩展名为.o的文件中ex:gcchello.c–c -pipe使用命名管道加快编译速度 -v显示编译器详细信息 -xlanguage指定编译语言 8.file查看文件的类型ex:filehello.c 9.stat查看文件的详细属性ex:stathello.c 10.包含头文件的另一种方式ex:-includeunistd.h (通知预处理器要包含的头文件) 11.-I(大)头文件目录路径(通知头文件的标准路径)-默认:/usr/include/ ex:gcca.c-I..(路径紧跟不加空格) 12.链接阶段参数:-L(大):指定额外的库路径-默认 /usr/lib/libc.a /usr/lib/libc.so -l(小):[跟上库名]表示指定要链接的库 .a静态库[编译时加载] ---运行时无须库文件支持,体积庞大 .so共享库[运行时加载] ---运行时需要库文件支持,体积很小 库名由:[前缀]lib库名[后缀].a或.so.版本号 13.建立库的命令: ar参数-vr输出的库文件名已组译好的一或多个.o目标文件 ex: (1) vitest.c (2) gcc-ctest.c (3) ar-rvlibtest.sotest.o 14.cprotpa.c>a.h 生成头文件 15.-Wall显示编译时的警告错误 16.-static使用静态方式编译[默认的编译方式为共享编译] 17.-O[数值0~4] 对程序的优化 低--->高 (提高运行速度) 18.-s/strip命令 去除可执行文件中的冗余字符 19.nm命令查看可执行文件的字符 20.indent 格式化c代码 (预处理、注释无法格式化) Gdb调试器 Gdb只能调试逻辑错误、必须使用gcc便宜器加-g参数(-g向生成的可执行文件中加入调试信息) 启动gdb:gdb[可执行文件名] 退出gdb:q或quit 命令: (1) list或l查看代码(默认显示由当前行向下十行代码) (2) list[行号] 显示指定行周围的十行代码 (3) list[行号],[行号] 显示指定范围的代码 (4) run或r 运行程序/让程序执行 (5) ctrl+c停止运行 (6) shell gdb进入到Linuxshell exit 回退到gdbshell中 (7) help 取得帮助ex:helplisthelpall (8) 设置断点:(断点不要设置在大括号和空行上) a)break[行号] 在指定行设置断点 b)break[函数名] 在指定函数的第一行设置断点 c)break[行号][条件] 条件为真时断点有效 d)break[函数名][条件] 条件为真时断点有效 e)watch[表达式] 表达式的值变化时产生中断 程序运行时并且表达式中变量声明后才可以设置 (9) continue 使程序继续运行 (10)step 进入函数内部(单步运行)