Linux下gcc的使用

一、编译器gcc的使用

  •  在home目录下新建文件夹exp5,将linkstack.h linkstack.c 和main.c 复制到exp目录

  •  编译linkstack.c 和main.c文件,使用链接选项 -o直接生成可执行文件,并观察exp5目录下内容的变化。

gcc main.c linkstack.c –o main

  • 运行main,输入5,记录下运行结果。

  • 添加编译选项-Wall,重新编译并运行。观察编译提示,说明添加-Wall选项的作用,并说明警告是否影响了输出结果。

添加-Wall选项的作用:显示程序编译过程中产生的所有警告,而警告并不会对输出结果产生影响。

  • 在home目录下新建文件夹temp,将exp5目录下linkstack.h和linkstack.c复制到temp目录,并且删除exp5目录下linkstack.h和linkstack.c

  • 分别编译linkstack.c 和main.c文件,注意两个文件时需要编译选项-c生成.o目标文件,同时编译main.c时需要通过编译选项 -I 指出头文件linkstack.h的路径,注意比较没有指出头文件路径的错误提示。

  • 链接main.o和linkstack.o生成可执行文件main,并运行main。

  • 删除main.o、linkstack.o和main

  • 在test目录下编译linkstack.c,并打包成一个静态库liblinkstack.a

  • 编译main.c生成可执行文件。注意需要设置编译选项-L告诉编译器到哪里找需要的库文件,设置编译选项-I告诉编译器到哪里找需要的头文件。注意即使库文件在当前目录,也要告诉编译器L.

gcc main.c –L ../test/ -llinkstack –o main

  • 删除编译后的文件,只保留原始的.c和.h文件,设置优化等级选项-On,要求优化等级为3级,并设置调试选项-g生成调试信息,重新编译,观察提示,并说明是不是优化等级越高越好。

并不是优化等级越高越好,过高时,编译的时间会被延长,用-O3来编译所有的软件包将产生更大体积更耗内存的二进制文件,大大增加编译失败的机会或不可预知的程序行为(包括错误)

二、用GDB调试程序BUG

  • fact.c实现阶乘功能,编译运行程序fact.c,输入5,结果显示1,观察结果不正确;

  • 重新编译gcc –g的选项编译这段代码;
  • 启动gdb调试程序  

  • 列出源代码

  • 在14行和19行设置断点

  

  • 执行程序 

  • 查看断点

  • 执行单步跟踪

  • 打印num变量以观察代码执行情况

  • 分别执行step,执行cont,察看二者的区别
  • 退出调试

  • 纠正错误,更改源程序并得到正确的结果。

三、编写包含多个文件的makefile

  • 已知工程proj包含3个源程序linkstack.h linkstack.c 和main.c,为其编写makefile文件。

1

2

3

4

5

6

7

8

9

10

11

12

main:main.o linkstack.o

gcc main.o linkstack.o -o main

 

main.o:main.c linkstack.h

gcc -c main.c

 

linkstack.o:linkstack.c linkstack.h

gcc -c linkstack.c

  • 键入 make ,查看结果,对实验进行解析,说明其功能。

功能解析:对文件夹里唯一一个makefile文件进行编译,是一条可以简化编译过程里面所下达的指令,当执行 make 时,make 会在当前的目录下搜寻 Makefile (or makefile) 这个文本文件,执行对应的操作。

  • 重新编写makefile

1

2

3

4

5

6

7

8

9

10

11

12

13

14

main:main.o linkstack.o

   gcc $^ -o $@

 

main.o:main.c linkstack.h

linkstack.o:linkstack.c linkstack.h

 

clean:

   @echo "cleanning the project"

   rm *.o

  • 键入 make ,查看结果,对实验进行解析,说明其功能。

功能解析:对重新编写的make文件进行重新更新。make 会自动的判别原始码是否经过变动了,而自动更新执行档

  • 键入 make clean查看结果,对实验进行解析,说明其功能。

功能解析:执行Makefile文件里的clean命令

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值