gcc/g++ 动静态库(略讲)gdb调试器【Linux系统编程】

一、gcc/g++

1、背景知识

(1)预处理

去注释

头文件展开

宏替换

条件编译

(2)编译

生成汇编

(3)汇编

生成机器可识别的代码

(4)链接

生成可执行文件或库文件

2、-o 选项 重新命名 

gcc(只能编译C语言)

带-o选项后跟文件名,自己命名处理完之后的文件名

test.c 放前面最后都可以 

3、ESc选项

带 -E选项:告诉gcc,现在开始进行程序的翻译,当做完预处理就停下来。

带 -S选项:告诉gcc,现在开始进行程序的翻译,当做完编译就停下

  

 带 -c选项:告诉gcc,现在开始进行程序的翻译,当做完汇编就停下

此时.o文件还是不能执行,因为还没有经过链接。

 链接:将可重定位二进制文件和库进行链接形成可执行程序。

记忆:

指令:ESc(电脑的Esc键)

后缀:iso(镜像文件)

二、动静态库 

动态库:共享库,跳到库中执行,执行完再返回调用处。动态库不能缺失,一旦对应的动态库缺失,影响的不止一个程序,可能导致很多程序都无法正常运行。

静态库:静态库进行静态链接时,会将自己的方法拷贝到目标程序中,改程序以后不用再依赖静态库。

Linux中的静态库需要自己安装:

C语言:

sudo yum install -y glibc-static

C++:

sudo yum install -y libstdc++-static

gcc默认优先动态链接。

如果没有静态库,又带 -static,是无法进行静态链接的;

如果没有动态库,只有静态库,这时就算没有-static,也是可以进行静态链接的。

所以, -static的本质是改变优先级。

一个可执行程序可能既有静态链接又有动态链接。

动vs静 

库文件其实就是源文件经过一定的翻译+打包——不用给你提供太多的源文件,也可以达到隐藏源文件的目的。

头文件提供方法的声明,库文件提供方法的实现+你的代码 =  你的软件。

库存在的价值就是不用做很多重复工作。

三、gdb调试器

背景: 

(1)debug和release:debug可以调试(形成可执行程序时会有调试信息),release不可以。Linux下默认是release版本。如果要以debug版本发布,带-g选项。

指令: 

(1)进入调试:

 gdb 可执行程序名

(2)退出调试:

 q

(3)怎么看到代码:

list(l)行数

也可以跟函数名:

 (4)

打断点:b 行号(如果是多文件, b 文件名 行号)

查看断点信息:info b

 第一行是断点的编号,删的时候只能根据编号删

删断点:d 编号

(5)开始调试:r

n:逐过程

s:逐语句

p 变量名:看这个变量的值

display 变量名:常显示变量,每次变化同步打印出来。

undisplay 编号:取消该变量的常显示。

until 行数:快速走过一个代码块,运行到指定行,如跳过一个for循环。

finish:走完当前函数后停下来。

c:运行到下一个段点后停。

disable 编号:保留断点但不用(禁用)。

enable 编号:启用断点。

set var 变量名:设置某个变量的值

 bt:看函数的调用堆栈

info  locals:查看当前栈帧局部变量的值。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值