inux下的gcc和gdb 以及库的使用

一、gcc 的编译过程:预处理、编译、汇编、链接
1. 无选项编译链接
用法:#gcc test.c
作用:将test.c预处理、汇编、编译并链接形成可执行文件。这里未指定输出文件,默认输出为a.out。
2. 选项 -o
用法:#gcc test.c -o test
作用:将test.c预处理、汇编、编译并链接形成可执行文件test。-o选项用来指定输出文件的文件名。
3. 选项 -E
用法:#gcc -E test.c -o test.i
作用:将test.c预处理输出test.i文件。
4. 选项 -S
用法:#gcc -S test.i
作用:将预处理输出文件test.i汇编成test.s文件。
5. 选项 -c
用法:#gcc -c test.s
作用:将汇编输出文件test.s编译输出test.o文件。
6. 无选项链接
用法:#gcc test.o -o test
作用:将编译输出文件test.o链接成最终可执行文件test。
7. 选项-O
用法:#gcc -O1 test.c -o test
作用:使用编译优化级别1编译程序。级别为1~3,级别越大优化效果越好,但编译时间越长。
8. 多个文件一起编译
用法:#gcc testfun.c test.c -o test
作用:将testfun.c和test.c分别编译后链接成test可执行文件。
9. 分别编译各个源文件,之后对编译后输出的目标文件链接。
用法:#gcc -c testfun.c //将testfun.c编译成testfun.o
#gcc -c test.c //将test.c编译成test.o
#gcc -o testfun.o test.o -o test //将testfun.o和test.o链接成test
二、GDB调试工具
gcc -g test.c
gdb a.out 或者gdb进入,file a.out
(gdb)q 退出
(gdb)list(l) 查看
(gdb)show listsize 显示行数
(gdb)set listsize 设置行数
(gdb)break(b) 函数名 函数入口加断点
(gdb)break(b) 行号 加断点
(gdb)run(r) 开始运行程序
(gdb)info break 查看断点
(gdb)next(n)
(gdb)delete 删除断点
(gdb)continue 持续运行
三、库
静态库:
1.编译库文件
2.编译:gcc -c add.c
3.生成库:ar rsc libadd.a add.o //lib前缀,add代表库的名字,.a代表静态库
4.编译调用库的源程序:demo.c
5.运行:gcc demo.c -ladd -L.
动态库:
1.编译库文件
2.编译:gcc -fpic -c add.c
3.生成动态库:gcc -shared -o libadd.so add.o
4.编译调用库的源程序:demo.c
5.运行:gcc demo.c ./libadd.so
动态库和静态库的区别:
1.后缀不一样
2.使用静态库的时候,连接器会找出程序中所需要的函数,然后将它们拷贝到可执行文件中,调用一次拷贝一次,一旦链接成功后,静态库就不需要了。
动态库,它是在执行的时候在程序内留下一个标记,指明当程序执行时,首先载入这个库。
3.静态库是在编译的时候调用;
动态库实在执行的时候调用。
4.静态库比动态库大。
5.liunx中默认的是动态库链接,如果是静态库链接的话:gcc -static demo.c
动态库和静态库的特点
静态库:程序臃肿,难以升级,但那是易于部署;
动态库:和静态库相反。
★注意:
#incude <> 是在系统中查找
#include ““当前目录下查找,找不到去系统中找,仍就找不到,报错。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值