gcc静态链接与动态链接,gdb test,$^依赖$@目标$

一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)

$^代表所有依赖文件

$@代表所有目标文件

$<代表第一个依赖文件

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章