Linux 中如何快速查看 C 库函数的头文件、库文件

Linux 中如何快速查看 C 库函数的头文件以及相应的函数信息

使用man帮助或grep

1)man命令 函数名,则能够打印该函数的所有说明,当然这个函数必须是Linux-C本身就有的函数。例如 man 3 ntohs

2)grep "keyword" /usr/include/*.h |grep "typedef"

以上方法可以查找关键字为keyword的结构体、类型、函数原型的定义,typedef可以替换为define尝试查找,几次重复查找找到的定义,就能最终确定。(头文件信息,结构体定义一般都在/usr/include目录底下)

如:grep “time_t” /usr/include/*.h |grep “typedef”可以查找到“typedef_time_t time_t;”

Locatekeyword.h 可以查找名为keyword 的头文件所在地目录树。

Linux的man很强大,该手册分成很多section,使用man时可以指定不同的section来浏览,各个section意义如下: 
1 - commands
2 - system calls
3 - library calls
4 - special files
5 - file formats and convertions
6 - games for linux
7 - macro packages and conventions
8 - system management commands
9 - 其他
解释一下, 
1是普通的命令
2是系统调用,如open,write之类的(通过这个,至少可以很方便的查到调用这个函数,需要加什么头文件)
3是库函数,如printf,fread
4是特殊文件,也就是/dev下的各种设备文件
5是指文件的格式,比如passwd, 就会说明这个文件中各个字段的含义
6是给游戏留的,由各个游戏自己定义
7是附件还有一些变量,比如向environ这种全局变量在这里就有说明
8是系统管理用的命令,这些命令只能由root使用,如ifconfig
想要指定section就直接在man的后面加上数字,比如 :
man 1 ls
man 3 printf
等等

Linux下如何查找一个函数在哪个库中

有一些常识或者说平时的积累是必要的,终究常用的库很少。
当我遇到一个函数不知道所属的库的时候,我会先找到头文件所属的包,然后看看那个包(或者相关包)的.a或者.so文件有哪些,然后:
objdump -x 库文件 | grep 函数名
确认函数名是定义而不是引用以后,就知道需要链接这个库了。

比如:查找htons对应的库文件

1)、man htons,里面讲的是arpa/inet.h;
2)、假设你用的是rpm类型的系统。

2.1)、centos/redhat下查看某个文件或命令属于哪个rpm包:

$ yum provides /etc/passwd

或者

$ rpm -qf /etc/passwd

2.2)、ubuntu及衍生版:

sudo dpkg -S whereis或

sudo dpkg-query -S /usr/bin/whereis

不过该命令不如rpm -qf强大,如/etc/passwd就查不出。

2.3)、gentoo及衍生版

#未安装的文件

e-file qmake

#已安装的文件查看

equery b <filename>

或qfile <filename>

如果通过上面还是搜索不到对应的包文件,那就baidu或google搜索了一下。
3)、貌似这个glibc-headers只是个包含头文件的软件包,看看其他类似的软件包是什么:rpm -qa | grep glibc
4)、我看见了glibc,glibc-devel,glibc-common,觉得glibc-devel肯定是提供.a(静态链接)的
5)、rpm -q --filesbypkg glibc-devel| grep \.a$ | awk '{print $2}' |xargs grep htons找到所有带htons的静态库文件
6)、只有一个:/usr/lib/libc.a
7)、如果有好几个的话,用objdump -x看看符号表

 
查看Linux下*.a库文件中文件、函数、变量等情况

在Linux 下经常需要链接一些 *.a的库文件,那怎么查看这些*.a 中包含哪些文件、函数、变量:

        1. 查看文件:ar -t*.a

        2. 查看函数、变量:nm*.a

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值