一步编译:
gcc -o 可执行文件名 依赖的所有.c文件
例:gcc -o main main.c
执行可执行程序:
路径+文件名 路径(相对 绝对)
例:./main /home/stu main
编译阶段在linux操作系统下堆文件名后缀无要求,但编译程序在依赖的文件后加.c是因为gcc编译器要求的.c结尾才可以编译
很显然我们写一下小项目时有必然存在.h文件,我们有需要如何执行呢?
我们执行的.c文件中的引入我们自己编写的头文件.h文件即可,紧接着正常编译.c文件并执行。
演示:
1、那我们如何直接执行可执行文件呢,例如演示的代码中执行main文件需要在前加入路径,如何不加路径可以执行文件呢?
我们可以想一下为什么命令可以直接执行,例如:ls cd pwd 等一系列命令可以直接执行,不需要加入其路径。我们知道bin文件中是命令文件,可以查看到bin文件中全是命令,所以我们只需要将main文件移动到bin文件中,便可以直接执行main文件。(移动至bin路径需要管理员权限,移动后记得移动回原位置)
移动操作命令:sudo mv ./main /bin/

2、上面的演示代码中,我们可以看到.c文件中引入.h文件时,用的是双引号“”,能不能用<>代替呢,为什么?
我们知道<>是在库中查找的文件,“”是自定义的文件,会在当前目录下寻找该文件。为此我们如果要将其改为<>,需要将文件移动到库文件中。
命令:sudo mv /usr/include/add.h ./
同样运行之后需要移动回来,***如果移动的文件名同库文件中的文件名相同,移动文件便会将两文件合并。
汇编链接原理:
三次编译的过程:
预编译:处理预编译指令,展开宏定义,删除注释。
编译阶段:语法,词法分析,代码优化汇总符号。
汇编阶段:翻译成二进制,生成各个段,生成符号表。
链接阶段:合并各个段,符号解析,符号重定位。
文件编译流程:

linux调试时需要进行版本的切换,调试需要从发行版本(release)切换到调试版本(debug),
命令:gcc -o main main.c -g (debug模式储存)。
调试步骤:
1.gcc -o main main.c -g //切换debug
2.启动调试:gdb main //调试可执行程序,–>安装gdb -->sudo apt install gcc.
3.出现(gdb)提示符出现即可输入命令 ,启动调试。
gdb调试:
调试重点操作:
下断点:b+行数 例如(b 9在第九行下断点)
显示函数:l 本身显示行数,l+行数 (l 9 显示第九行左右的代码)
显示断点:info b(显示断点信息)
单步执行:n
运行程序:r
实时查看当前变量的信息:p +变量,
删除断点:delete 断点号
显示文件行数源代码:list+val:num(显示val文件num行上线源代码)
继续执行到下一个断点处:c(continue)
进入将要被调用的函数:s
跳出函数:s
退出调试:q
打印变量的值:p+ val