linux下怎么查看某个结构体的定义?
Linux下查看结构体、变量、函数的定义可以用一款Windows上的软件叫做Source Insight,这个软件在Linux的Wine环境中运行的非常好,是少数可以在Linux平台正常运行的Windows应用,这个软件最大的作用就是浏览代码,可以很容易的跳转到变量、函数、结构体、类的定义处,特别是代码项目比较庞大时就更能够显示出它的好处了。
linux中自定义函数优缺点?
在Linux操作系统中,函数库根据是否被编译到程序内部而分为静态函数库和动态函数库。
静态函数库
扩展名(.a)
编译行为
静态函数库在编译的时候会被直接整合到执行程序之中,因此执行程序会大一些。
可以独立执行
由于静态函数库会被整合到执行程序中,即执行程序相当于已经有了静态函数库的一个副本了,那么执行程序便可以独立执行,与原静态函数库的状态无关了。
升级
因为函数库会跟着源程序一起编译,因此,如果函数库升级了,那么使用该函数库的源程序需要重新编译生成新的执行程序。
动态函数库
扩展名(.so)
编译行为
包含动态函数库的源程序在编译的时候,使用动态函数库的地方只有一个指向函数库的“指针”而已,并没有将动态函数库整合进来,然后在执行程序要使用到函数库的时候才根据这个“指针”去调用相应的动态函数库,所以执行文件比较小。
不能独立执行
因为在编译的时候,动态函数库在执行程序中只是一个“指针”的存在,并且在执行的时候调用,因此,动态函数库需要在程序执行的时候存在,并且函数库的目录要跟程序中的“指针”保持一致。
升级
因为编译的时候函数库只是留下一个地址,因此只要地址不变,函数库变化了也不会影响程序的执行。因此,在动态函数库升级的时候,源程序不需要重新编译。(这里可以看出,动态函数库本身似乎可以很容易地进行修改,比较重要的是其存放的位置,如果位置发生改变,会导致使用该函数库的程序在执行时发生错误)
对于目前的开发比较倾向于动态函数库,原因是升级容易。因此,我们也需要了解我们的二进制执行文件到底使用了哪些动态函数库。而ldd命令可以查询到。
**ldd **
参数:
-v: 列出所有内容信息;
-d: 重新将数据有丢失的link点显示出来;
-r: 将ELF有关的错误内容显式出来。
1
2
3
4
5
1
2
3
4
5
例如我们常用到的ls命令,我们可以查看其使用到的动态函数库。
我们先用which命令查看ls命令的目录。