编译文件分为四个阶段:预处理,编译,汇编,链接.
命令:gcc mytest.c -o mytest 会将mytest.c一步变为mytest的可执行文件 -o:目标是.
一步步处理过程如下:
1.预处理 gcc -E mytest.c -o mytest.i -E:从现在开始进行程序的预处理至完成预处理.
2.编译 gcc -S mytest.i -o mytest.s -S:从现在开始进行编译至编译结束
3.汇编 gcc -c mytest.s -o mytest.o -c:从现在开始汇编至汇编结束 这里的.o文件是二进制的可重定向文件 不能被执行 此时仍是C语言
4.链接:gcc mytest.o -o mytest
对mytest 进行 ldd 命令可以看到文件调用的库是libc.so.6
在路径: usr/include/stdio.h 下可以找到提供C语言函数列表的声明
在路径:lib64/ 下可以看到几乎所有库.
链接分为动态链接(必须使用 .so动态库文件)和静态链接(必须使用 .a静态库文件).
动态链接:库函数中把我需要的函数的地址放到程序里面. 节省资源
静态链接:把库函数本身拷贝到可执行程序中.
g++ gcc 默认生成的可执行程序使用动态链接.
静态库安装:sudo yum install -y glibc-static C静 sudo yum install -y libstdc++-static C++静
gcc test.c -o mytest.s -static 以静态链接.
自动化构建项目
在test.c同路径下新建一个Makefile文件,vim进行编辑.目的是为了形成mytest文件,依赖于test.c文件.
换行TAB加依赖方法
mytest:test.c
gcc test.c -o mytest
再编译时只需输入命令 make
接下来添加清理工作
mytest:test.c //依赖关系
gcc test.c -o mytest //依赖方法
.PHONY:clean //依赖关系
rm -f my.test //依赖方法
.PHONY意思是跟着的命令总是被执行.
输入make clean即可删除文件
$@代表mytest
$^代表:后面的所有依赖关系
makefile在自顶向下扫描时默认只会形成第一个目标文件(即不执行清理操作)
判断一个可执行程序是否最新是看文件的最近修改时间和生成可执行文件的时间.
可以使用stat 文件名 命令查看ACM时间
C:即Change 属性改变就改变
A:即Access 累计读取文件一定次数修改.
M:Modify 修改文件内容
.PHONY:all
all:exce mycod
mycod:mycod.c
gcc -o $@ $^
exce:exec.c
gcc -o $@ $^
.PHONY:clead
clean:
rm -f exec mycod
#include
int main()
{
printf("hello");
sleep(3);
return 0;
}
程序由上到下执行,但执行程序发现先睡眠3秒,在打印出hello.
原因是C语言提供输出缓冲区,先执行了打印只不过没有立马显示出来.显示器设备是行刷新的.
碰到"\n"就把之前全部字符显示出来.如若不使用\n也想立马显示,则需要:
fflush(stdout);
/r:回车 回到同一行的开始位置.由此可以制作进度条等操作
拓展源 :sudo yum install -y epel-release
1.搜索:
yum list 显示可以安装的所有软件
yum serch 关键词
yum list | grep 关键词
安装:
sudo yum install -y 完整软件名
删除:
sudo yum remove 软件
links www.baidu.com
什么是版本控制:每一版的材料修改与备份.实现该过程使用版本控制器git或svn
预备:
git clone gitee仓库网址
1.git add 文件 //添加文件到本地仓库 git add .提交路径下所有文件
2.git commit -m "这里必须写提交日志" //提交代码到本地仓库中
3.git push //提交代码到远端仓库
git log 查看提交日志
注意:
1.首次使用需要写邮箱和名称
2.有时候无法提交,会出现提交冲突.使用git pull命令使同步
3. .gitignore //不想提交某些后缀的文件同步到远端的git仓库,就可以添加到.gitignore
vim .gitignore 打上不想要的后缀名
4.git rm可以删除
gcc g++默认生成的可执行程序是release的 无法被直接调试
格式:gcc mytest.c -o mytest-dubug -g -g:dubug版本
gdb 可执行程序 进入调试
常用命令:
quit 退出调试 l 0从一开始显示
run/r 编译(F5) breakpoint/b 18 在第18行打断点
info b 查看断点 d 2 删除编号为2的断点
disable 2 关闭2号断点 enable 2 使用2号断点
next/n 逐过程调试(F10) step/s 逐语句调试(F11) until 12 在函数局部跳转到第12行
c 运行到下一个断点 finish 将当前函数跑完后停止
display 变量 设置变量常显示 undisplay 2 取消编号为2的变量常显示
bt 查看当前的调用堆栈
p 变量名 打印变量内容
gdb会记录最近一次操作,回车会进行该操作.