标签:进制 默认 编译 因此 实验 for循环 汇编 detail clu
使用 mkdir
分别创建三个目录,分别存放源码,头文件和输出文件,输入命令 vi *.c
或 vi *.h
,敲入代码即可,以下是输入完毕后的文件及文件夹目录:
这是vi中的printf帮助文档,首先 cd src
,然后 vi main.c
,将光标移动到printf上去,按大写的K即可:
通过gcc编译通过
gcc -I include src/*.c -o bin/20199324
使用到的命令
gcc -E .c -o .i //预处理
gcc -S .i -o .s //编译,产生汇编代码
gcc -c .s -o .o //汇编,编译为目标文件(.o文件,可重定位目标文件)
gcc *.o -o XXX //链接生成可执行文件
预处理:
gcc -E -I include src/*.c -o bin/*.i
编译:
gcc -S -I include bin/*.i -o bin/*.s
汇编:
gcc -c -I include bin/*.s -o bin/*.o
链接:
cd bin
gcc *.o -o test
gcc -g
编译vi输入的代码gdb相关命令
[root@redhat home]# gdb 调试文件
:启动gdb(gdb) l
:从第一行开始列出源码(gdb) r
Run的简写,运行被调试的程序。如果此前没有下过断点,则执行完整个程序;如果有断点,则程序暂停在第一个可用断点处;(gdb) n
单步执行(gdb) c
Continue的简写,继续执行被调试程序,直至下一个断点或程序结束;(gdb) b 8
b: Breakpoint的简写,设置断点。在源程序第8行;(gdb) b X(整数) if i==X
设置条件断点,在for循环后一行设置;(gdb) p <变量名称>
Print的简写,打印变量的值;(gdb) q
Quit的简写,退出GDB调试环境;(gdb)info b
查询所有断点;(gdb)delete 行号
删除断点首先要gcc -g来生成一个可执行文件
gcc -g *.c
设置一个行断点:
设置条件断点:
步骤
分别对四个c文件生成编译文件 (因为之前已经有编译好的.o文件,所以没有重复该步骤。。。但是后来gdb调试的时候发现不行,因为之前编译的.o文件时候没有加-g
,所以还是得加这一步骤)
gcc -g -c *.c
ar rcvs(rc/rcs) mymath.a add.o sub.o div.o mul.o
gcc -g -static -o prog main.o ./mymath.a
./prog
对可执行文件的调试:
步骤
-shared -fpic
参数,生成共享文件mymath.so
gcc -g -shared -fpic -o mymath.so add.c sub.c mul.c div.c
gcc -g -o prog1 mian.c ./mymath.so
./prog1
知识点:
make
命令,整个工程完全编译,极大的提高了软件的开发效率。步骤:
sudo gedit Makefile
,输入代码并保存。编写的Makefile文件内容:testmymath: main.o add.o sub.o mul.o div.o
gcc main.o add.o sub.o mul.o div.o -o testmymath
main.o: main.c head.h
gcc -c main.c
add.o: add.c head.h
gcc -c add.c
sub.o: sub.c head.h
gcc -c sub.c
mul.o: mul.c head.h
gcc -c mul.c
div.o: div.c head.h
gcc -c div.c
make
,进行自动化编译./testmymath
查看结果注意:(自己虚拟机下命令的注意事项)
gcc rm 文件名
gcc rm -rf 目录名
用vim或gedit(文本编辑器)时候一定要在前面加sudo
,否则没有权限修改或保存。
-I xxx 的意思是除了默认的头文件搜索路径(比如/usr/include等)外,同时还在路径xxx下搜索需要被引用的头文件。
gcc常用命令区分
gcc -c *.c
//把.c文件转换为目标文件.o (预处理、编译、汇编)
gcc *.c
// 编译成a.out可执行文件
gcc *.c -o XXX
//一步到位的编译指令(实质上,该编译过程是分为四个阶段进行:预处理、编译、汇编、链接)
用 gcc -g
编译vi输入的代码:加上-g选项以后,gcc在编译是会做以下额外的操作:
参考资料:
https://blog.csdn.net/oqqhutu12345678/article/details/78938688
https://blog.csdn.net/Linkthaha/article/details/39996897
https://blog.csdn.net/zhangsmlyl/article/details/78941158
https://zhidao.baidu.com/question/313935918.html
标签:进制 默认 编译 因此 实验 for循环 汇编 detail clu
原文地址:https://www.cnblogs.com/yangdd/p/12002753.html