一GCC学得的知识总结
(1)
编译链接gcc hello.c -o hello
只编译不链接gcc -c hello.c
如果出现gcc -c hello.c -o hello;则会报错
[root@embedclub gcc]# gcc -c hello -o hello
gcc: hello:未使用链接器输入文件,因为链接尚未完成
产生调试信息gcc -g hello.c -0 hello
-rwxrwxr-x 1 root root 5743 5月 21 09:16 hello //加小d,5743变大
-rwxrwxr-x 1 root root 4639 5月 21 09:17 hello //不加小d,4639相对小
优化,速度快gcc -O hello.c -0 hello
查看时间长短time ./hello
[root@embedclub gcc]# gcc -O hello.c -o hello
[root@embedclub gcc]# ls
hello hello.c hello.o
[root@embedclub gcc]# time ./hello
hello world
real 0m0.001s
user 0m0.000s
sys 0m0.000s
[root@embedclub gcc]# rm hello
rm:是否删除普通文件 "hello"?y
[root@embedclub gcc]# gcc hello.c -o hello
[root@embedclub gcc]# time ./hello
hello world
real 0m0.001s
user 0m0.000s
sys 0m0.001s
[root@embedclub gcc]#
生成警告信息gcc -Wall hello.c -0 hello
不生产警告信息gcc -w hello.c -0 hello
-YES(大写的字母)相当与在程序里使用宏定义#define YES
(2)
静态链接与动态链接
静态:每个文件里都有.h
动态:去调用固定文件里的.h
这里出了问题,编译不成功
(3)
linux头文件在/usr/include/
而自己编写的头文件,
pwd查看当前目录
在编译时gcc -I/home/lesson/part1 hello.c -o hello
[root@embedclub gcc]# touch a.h
[root@embedclub gcc]# ls
a.h hello.c
[root@embedclub gcc]# pwd
/home/embedclub/yingyong_test/gcc
[root@embedclub gcc]# gcc -I/home/embedclub/yingyong_test/gcc hello.c -o hello
[root@embedclub gcc]# ls
a.h hello hello.c
[root@embedclub gcc]#
二GDB学得的知识总结
(1)启动调试的两种方式:
第一种
gdb test//启动起来
b main//打断点
run//运行
n//一步一步运行
c//直接全部运行
第二种
gdb
file test
(2)
l //查看程序
b 函数名 //在函数入口处添加断点
b 行号 //在指定行添加断点
b file:行号 //在指定文件的指定行号添加断点
(3)
info b //查看断点信息
delete 1//删除断点1
print 1 //查看断点一处信息
n//单步执行
s//单步执行(不进子函数)
(4)quit //退出调试
三编译makefile的总结
(1)
目标 依赖 命令
main.o : main.c
gcc -c main.c
(2)
$^代表所有依赖文件
$@代表所有目标文件
$<代表第一个依赖文件