二进制文件.o
以点o文件为结尾的文件为二进制文件 目标文件
gcc –o hello_world hello_world.c 会将目标文件会被删除,直接生成可执行文件
那么什么时候需要目标文件呢?制作库文件的时候
通过链接器将目标文件链接可以生成可执行文件,
gcc
gcc是 gnu cc的简称,gcc能编译c,c++,object C等语言
gcc 【option】【filenames】
-c 只是编译,生成目标文件
-S 只是编译不汇编,生成汇编代码
-E 只进行预编译,不做其他处理
-g 再可执行程序中包含标准调试信息
-o file 指定输出文件
-v 版本
-std=name 指定c语言的标准 c90 c89 c00等
-l dir 在头文件的搜索路径列表中添加dir目录
example:
为了工程化,一个工程下一般具有src bin obj include :源文件 可执行文件 目标文件 头文件
gcc –o bin/helloworld src/helloworld.c
gcc –o obj/helloword.o –c src/helloworld.c
gcc –o bin/helloworld obj/helloworld.o
gcc -std=c99 –o bin/helloworld src/helloworld.c //指定c语言标准
优化选项:
-O 减少代码的长度和执行时间,效果等价于-O1,其中包括线程的跳转和延迟退栈
-O2:除完成所有-O1级别的优化之外,还要进行一些额外的调整工作,比如处理器指令的调度。
-O3: 除完成所有以上工作外,还包括循环展开和其他一些与处理器特性相关的优化工作
数字越大优化等级越高,一般用第二个,它在优化长度、编译时间和代码大小之间取得了一个比较理想的平衡点。
linux查看运行时间 time 【filename】
gcc –O –o bin/optimize src/optimize.c
警告和出错选项:
-ansi:支持符合ANSI 标准的c程序
-pendantic 允许发出ansi c标准所列的全部警告信息
-pendantic-error:允许发出 ANSI C 标准所列的全部错误信息
-w 关闭所以警告
-Wall:允许发出gcc所提供的所有有用的警报信息(跨平台可能出现的问题)
制作库文件选项:
-L dir:在库文件的搜索路径列表中添加dir目录
-static:链接静态库
-lname:链接名为name 的库文件
-shared:表明是共享库
gdb
gdb调试器:基于Unix和Linux的程序调试工具,没有图形化的友好界面,与微软VC等工具所媲美
gdb的作用:
- 可以按照用户的要求随意运行程序
- 可以让被调试的程序在用户所设定的断点处停住
- 可以检查此时用户程序中所发生的事,当程序被停住时
- 可动态改变用户程序的执行环境
gdb的使用;
gcc –g 【其他选项】 【文件名】
gdb调试的是可执行程序而不是源代码,对源文件进行编译一定要加上选项-g才包含调试信息
gdb 可执行文件
l(list)":查看所载入的文件
b(break):设置断点,程序运行到断点停止,后面可以跟上行号或者函数的名字
info b:查看设置的断点的情况
r(run):从第一行开始运行代码,或从指定行开始,可在r后面加上行号
p n:查看变量n的值
n(next):单步运行下一行代码(遇到函数不会进入函数)
s(strp):单步运行下一行代码(遇到函数会进入函数)
c(continue):恢复程序的运行,执行剩余的程序