windows下编写程序分动态编译和静态编译,linux下同样也分。
Linux下运行程序的步骤:
以上就是在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)