Linux下动静态编译链接以及gdb调试命令

时间:2021-07-30 08:10:02

windows下编写程序分动态编译和静态编译,linux下同样也分。

Linux下运行程序的步骤:

Linux下动静态编译链接以及gdb调试命令

以上就是在linux下执行程序时所做的,windows下也大同小异。


动静态链接:

动态链接:依赖于第三方库,在执行程序时,当需要库函数时,会直接进到库里去找,整个程序本身不具有需要的库,所以动态链接的缺点就是不利于移植,因为可能会因为库的原因而出错,但也有有点就是不浪费资源,生成的文件占内存小。


静态链接:它不依赖于第三方库,当执行程序时,会直接将第三方库整个加载到它程序本身,相当于绑定在一起,但是缺点就是比较的占内存,也浪费资源,但是比较好的是,移植性相对高一点,不是特别容易出错。

生成静态可执行文件命令:

gcc -o XXX-static XXX.c -static
此静态文件的大小要比同类型文件大很多,因为加载了库在其中。


动静态库:

其都会以lib开头,静态库以 <.a> 结尾,动态库以 <.so>结尾,后面都会跟上版本号。

gcc中默认为动态链接,默认为release版本


gdb调试:

list/l:显示代码,其后可以跟行号,函数名,文件名:函数名等形式

breakpoint/b:打断点,其后可以跟行号,函数名,文件名:函数名等形式

info b:查看断点

delete/d 断点编号:删除断点

run/r:运行程序,当有断点存在时,会在第一个断点处停下

next/n:单步执行程序

step/s:进入函数

P  X:查看变量的内容(X为变量)

display   X:查看常量变化的值(常显示)

undisplay 编号:取消查看

until  行号:跳转至任意行,除空格,括号除外,即有效行。

C:从一个断点跳转至另一个断点

bt:查看调用栈

finish:直接完成一个函数的调用

disable  断点编号:暂时关闭一个断点

enable  断点编号:开启一个断点

set  var :修改变量的值(例如:set  var  i=9)