一、gcc的学习
1. GCC编译的四个阶段
1、预处理:将代码中的代码中的头文件,宏定义宏选择等进行展开及替换。 gcc -E
2、编译 :产生汇编文件 。gcc -S
3、汇编 :将汇编文件编译为目标文件。 gcc -c
4、链接 :产生可执行文件
2.例子
root@pailanglee-virtual-machine:/home/pailanglee# vi hello.c
root@pailanglee-virtual-machine:/home/pailanglee# cat hello.c
#include<stdio.h>
main ()
{
printf("Hello World
");
}
root@pailanglee-virtual-machine:/home/pailanglee# gcc hello.c
hello.c:2:1: warning: return type defaults to ‘int’ [-Wimplicit-int]
2 | main ()
| ^~~~
root@pailanglee-virtual-machine:/home/pailanglee# cat >> hello.c
root@pailanglee-virtual-machine:/home/pailanglee# vi hello.c
root@pailanglee-virtual-machine:/home/pailanglee# gcc hello.c
root@pailanglee-virtual-machine:/home/pailanglee# ./a.out
Hello World
3.常用的gcc参数
-
gcc -c hello.c
root@pailanglee-virtual-machine:/home/pailanglee# gcc -c hello.c root@pailanglee-virtual-machine:/home/pailanglee# ls 公共的 模板 视频 图片 文档 下载 音乐 桌面 a.out hello.c hello.o snap test.c root@pailanglee-virtual-machine:/home/pailanglee#
-
gcc -o hello hello.c
指定hello编译出的文件名位hello
root@pailanglee-virtual-machine:/home/pailanglee# gcc -o hello hello.c root@pailanglee-virtual-machine:/home/pailanglee# ls 公共的 模板 视频 图片 文档 下载 音乐 桌面 a.out hello hello.c hello.o snap test.c root@pailanglee-virtual-machine:/home/pailanglee#
-
gcc -o hello hello.c -Wall
root@pailanglee-virtual-machine:/home/pailanglee# gcc -o hello hello.c -wall gcc: error: unrecognized command line option ‘-wall’; did you mean ‘-Wall’? root@pailanglee-virtual-machine:/home/pailanglee# gcc -o hello hello.c -Wall root@pailanglee-virtual-machine:/home/pailanglee#
-
gcc -S hello.c
仅激活预处理和汇编
root@pailanglee-virtual-machine:/home/pailanglee# gcc -S hello.c root@pailanglee-virtual-machine:/home/pailanglee# ls 公共的 模板 视频 图片 文档 下载 音乐 桌面 a.out hello hello.c hello.o hello.s snap test.c root@pailanglee-virtual-machine:/home/pailanglee#
-
gcc -E hello.c >hello.pre
只有激活预处理
root@pailanglee-virtual-machine:/home/pailanglee# gcc -E hello.c >hello.pre root@pailanglee-virtual-machine:/home/pailanglee# ls 公共的 模板 视频 图片 文档 下载 音乐 桌面 a.out hello hello.c hello.o hello.pre hello.s snap test.c root@pailanglee-virtual-machine:/home/pailanglee#
二、gbd调试
1. 什么是gbd
gbd是一个调试代码的调试器,可以用来观察程序的内部结构和内存堆栈的情况
2.gbd的功能
- 监视程序中的变量的值
- 设置程序的断点
- 逐行执行代码
3.用法
三、vim的安装
安装vim
安装
pailanglee@pailanglee-virtual-machine:~$ sudo apt-get install vim-nox [sudo] pailanglee 的密码: E: 无法获得锁 /var/lib/dpkg/lock-frontend。锁正由进程 4451(unattended-upgr)持有 N: 请注意,直接移除锁文件不一定是合适的解决方案,且可能损坏您的系统。 E: 无法获取 dpkg 前端锁 (/var/lib/dpkg/lock-frontend),是否有其他进程正占用它? pailanglee@pailanglee-virtual-machine:~$ yum -y install vim* Command 'yum' not found, did you mean: command 'gum' from snap gum (0.8.0) command 'zum' from deb perforate (1.2-5.1) command 'num' from deb quickcal (2.4-1) command 'uum' from deb freewnn-jserver (1.1.1~a021+cvs20130302-7build1) command 'sum' from deb coreutils (8.30-3ubuntu2) See 'snap info <snapname>' for additional versions. pailanglee@pailanglee-virtual-machine:~$ ![image-20201115125147138](https://img2020.cnblogs.com/blog/1778034/202101/1778034-20210131210958708-2039612720.png) ```shell sudo rm /var/cache/apt/archives/lock sudo rm /var/lib/dpkg/lock ``` # 四、make的使用 ## 1.基本功能 通过makefile文件来描述源程序之间的关系root@pailanglee-virtual-machine:/home/pailanglee# ls 公共的 视频 文档 音乐 a.out hello.c hello.pre snap 模板 图片 下载 桌面 hello hello.o hello.s test.c root@pailanglee-virtual-machine:/home/pailanglee# vi cos_value.c root@pailanglee-virtual-machine:/home/pailanglee# ls 公共的 视频 文档 音乐 a.out hello hello.o hello.s test.c 模板 图片 下载 桌面 cos_value.c hello.c hello.pre snap root@pailanglee-virtual-machine:/home/pailanglee# vi haha.c root@pailanglee-virtual-machine:/home/pailanglee# vi main.c root@pailanglee-virtual-machine:/home/pailanglee# vi sin_value.c root@pailanglee-virtual-machine:/home/pailanglee# ls 公共的 图片 音乐 cos_value.c hello.c hello.s snap 模板 文档 桌面 haha.c hello.o main.c test.c 视频 下载 a.out hello hello.pre sin_value.croot@pailanglee-virtual-machine:/home/pailanglee# ls 公共的 视频 文档 音乐 a.out hello.c hello.pre snap 模板 图片 下载 桌面 hello hello.o hello.s test.c root@pailanglee-virtual-machine:/home/pailanglee# vi cos_value.c root@pailanglee-virtual-machine:/home/pailanglee# ls 公共的 视频 文档 音乐 a.out hello hello.o hello.s test.c 模板 图片 下载 桌面 cos_value.c hello.c hello.pre snap root@pailanglee-virtual-machine:/home/pailanglee# vi haha.c root@pailanglee-virtual-machine:/home/pailanglee# vi main.c root@pailanglee-virtual-machine:/home/pailanglee# vi sin_value.c root@pailanglee-virtual-machine:/home/pailanglee# ls 公共的 图片 音乐 cos_value.c hello.c hello.s snap 模板 文档 桌面 haha.c hello.o main.c test.c 视频 下载 a.out hello hello.pre sin_value.c root@pailanglee-virtual-machine:/home/pailanglee# vi makefile root@pailanglee-virtual-machine:/home/pailanglee# cat makefile cat: makefile: 没有那个文件或目录 root@pailanglee-virtual-machine:/home/pailanglee# vi makefile root@pailanglee-virtual-machine:/home/pailanglee# make main cc -c -o main.o main.c main.c: In function ‘main’: main.c:9:12: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘char (*)[15]’ [-Wformat=] 9 | scanf ("%s", &name ); | ~^ ~~~~~ | | | | | char (*)[15] | char * main.c:12:2: warning: implicit declaration of function ‘haha’ [-Wimplicit-function-declaration] 12 | haha( name ); | ^~~~ main.c:13:2: warning: implicit declaration of function ‘sin_value’ [-Wimplicit-function-declaration] 13 | sin_value( angle ); | ^~~~~~~~~ main.c:14:2: warning: implicit declaration of function ‘cos_value’ [-Wimplicit-function-declaration] 14 | cos_value( angle ); | ^~~~~~~~~ cc -c -o haha.o haha.c cc -c -o sin_value.o sin_value.c cc -c -o cos_value.o cos_value.c gcc -o main main.o haha.o sin_value.o cos_value.o -lm root@pailanglee-virtual-machine:/home/pailanglee# ls 公共的 视频 文档 音乐 a.out cos_value.o haha.o hello.c hello.pre main main.o sin_value.c snap 模板 图片 下载 桌面 cos_value.c haha.c hello hello.o hello.s main.c makefile sin_value.o test.c root@pailanglee-virtual-machine:/home/pailanglee# make clean rm -f main main.o haha.o sin_value.o cos_value.o root@pailanglee-virtual-machine:/home/pailanglee# ls 公共的 模板 视频 图片 文档 下载 音乐 桌面 a.out cos_value.c haha.c hello hello.c hello.o hello.pre hello.s main.c makefile sin_value.c snap test.c root@pailanglee-virtual-machine:/home/pailanglee#2. makefile 的基本语法与变量
- # : 表示注解
需要在命令行 (例如 gcc 这个编译器指令) 的第一个字符 - target与相依文件也就是目标文件之间用冒号隔开
3.用宏简化
[root@study ~]# vi makefile
LIBS = -lm
OBJS = main.o haha.o sin_value.o cos_value.o
main: ${OBJS}
gcc -o main ${OBJS} ${LIBS}
clean:
rm -f main ${OBJS}
-
引用宏时需要加 $ 符号
-
宏名的长度超过1是要用圆括号()
$(CL)