社区
Linux_Kernel
帖子详情
如何查看linux函数对应的库文件.
yanjinbin0
2010-03-17 09:09:36
比如我们可以通过man htons查看到所属头文件,但并没有指明所属库文件,
那应该在那找函数对于的库文件啊.
...全文
2205
12
打赏
收藏
如何查看linux函数对应的库文件.
比如我们可以通过man htons查看到所属头文件,但并没有指明所属库文件, 那应该在那找函数对于的库文件啊.
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
yanjinbin0
2010-03-18
打赏
举报
回复
非常感谢:iisbsd的解答...
iisbsd
2010-03-17
打赏
举报
回复
有一些常识或者说平时的积累是必要的,终究常用的库很少。
当我遇到一个函数不知道所属的库的时候,我会先找到头文件所属的包,然后看看那个包(或者相关包)的.a或者.so文件有哪些,然后:
objdump -x 库文件 | grep 函数名
确认函数名是定义而不是引用以后,就知道需要链接这个库了。
充电宝111
2010-03-17
打赏
举报
回复
不需要知道库阿,有头文件就够用了,不过你想看源码那就只能自己找了
qihuanfengyun
2010-03-17
打赏
举报
回复
你如果有足够的时间可以用 ar 将gcc编译程序时链接的相关静态库解压,能解压出很多函数。在与你的*.h中的函数对照。找到到底谁属于谁。
yanjinbin0
2010-03-17
打赏
举报
回复
不是查看运行程序的执行库文件.
是在变成的时候,查看头文件属于那些库文件.
例如:matth.h 属于libm.a 库文件
那么arpa/inet.h 头文件属于那些库文件.
qihuanfengyun
2010-03-17
打赏
举报
回复
你是想查看elf文件对应的动态库文件吗?
用ldd <文件名>
就行了。
如果想看静态库,它应该已经包含在你的elf文件中了吧。在静态连接时链接器ld就给你做完了。
bayougeng
2010-03-17
打赏
举报
回复
我知道ldd可以看可执行文件。
比如:
ldd /bin/ls
函数的,和这个应该不是一码事吧。
天亮后说晚安
2010-03-17
打赏
举报
回复
我一般是到相关驱动找,找不到就搜索
iisbsd
2010-03-17
打赏
举报
回复
多说几句——在debian类型的机器上用dpkg或者apt-files也是类似的过程,有时候需要一些常识或者猜测,比如*-devel包都是提供头文件和静态链接库的,对应的不带-devel的包都是提供.so的。
还是要积累,做多了就有直觉了。
iisbsd
2010-03-17
打赏
举报
回复
1、man htons,里面讲的是arpa/inet.h;
2、假设你用的是RPM类型的系统:rpm -qa --filesbypkg | grep arpa/inet.h,你就看见了一个或者几个包提供这个文件,现在我看到的是glibc-headers(RHEL5)
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看看符号表
yanjinbin0
2010-03-17
打赏
举报
回复
这样理解,真的可以吗????
yanjinbin0
2010-03-17
打赏
举报
回复
[Quote=引用 6 楼 iisbsd 的回复:]
有一些常识或者说平时的积累是必要的,终究常用的库很少。
当我遇到一个函数不知道所属的库的时候,我会先找到头文件所属的包,然后看看那个包(或者相关包)的.a或者.so文件有哪些,然后:
objdump -x 库文件 | grep 函数名
确认函数名是定义而不是引用以后,就知道需要链接这个库了。
[/Quote]
我只能通过man 找到所属头文件,例如man htons.
[头文件所属的包],这步如何找,我知道头文件,但我不知道怎么找包文件.
[查看该包的.a或.so文件],怎么通过该包文件找到所属的库文件....
请指教....
Linux
查看
静态
库
/动态
库
定义的
函数
,以及查找
函数
对应
的静态
库
/动态
库
1.
查看
动态/静态
库
包含的
函数
,xxx为
库
名称 a.
查看
静态
库
定义的
函数
readelf -c xxx.a b.
查看
动态
库
定义的
函数
readelf -A xxx.so 2. 查找
函数
对应
的静态/动态
库
,xxx为遍历的
库
名称
函数
名(包含路径),yyy为
函数
名 a.查找
函数
对应
的静态
库
nm -o xxx.a | grep 'yyy' b.查找
函数
对应
的动态
库
nm -o xxx.so| grep 'yyy' ...
Linux
下 .o .a .so .mk
文件
说明
.o、.a、.so
文件
都是
Linux
下的程序
函数
库
,【即编译好的可以供其他程序使用的代码和数据】。 优点:程序模块化,容易重新编译,方便升级。 分类: .o
文件
动态加载
函数
库
(
对应
.o
文件
,一个.c或.cpp
文件
对应
一个.o
文件
相当于Windows里的.obj
文件
) .a
文件
静态
函数
库
(
对应
.a
文件
好多个.o合在一起,用于静态连接 多个.a可以链接生成一个out可
linux
下的 .a
文件
.o
文件
是什么
文件
?各有什么作用?
.o 就是object, 也就相当于windows下编译的obj
文件
, 俗称目标
文件
. .a 就是archive, 也就相当于windows的VC下编译的lib
文件
, 俗称静态
库
文件
. .o
文件
是链接
文件
,.a是静态
库
文件
,靠.o
文件
生成,作为一个
库
为外部程序提供
函数
,接口。 生成.o
文件
: gcc -c test.o test.c 生成.a
文件
: ar cqs test.a test.o .o 就相当于windows里的obj
文件
,一个.c或.cpp
文件
对应
一个.o
文件
.a 是好多个.
Linux
调用动态
库
(.SO
文件
)总结
像window调用
库
文件
一样,在
linux
下,也有相应的API因为加载
库
文件
而存在。它们主要是以下几个
函数
:
函数
名 功能描述 dlopen 打开对象
文件
,使其可被程序访问 dlsym 获取执行了dlopen
函数
的对象
文件
中的
函数
的地址 dlerror 该
函数
没有参数,它会在发生前面的错误时返回一个字符串,同时将其从内存 中清空; 在没有错误发生时返回 NULL, dlclose 关闭目标
文件
。如果无需再调用共享对象的话,应..
linux
中o,a,so
文件
详解
工程里很多
函数
只是有声明,找不到实现的代码。因为那些实现代码已经编译成
库
所以看不见,我所看见的全是一堆头
文件
. .o、.a、.so
文件
都是
Linux
下的程序
函数
库
,即编译好的可以供其他程序使用的代码和数据。 优点:程序模块化,容易重新编译,方便升级。 分类:静态
函数
库
(
对应
.a
文件
)、共享
函数
库
(
对应
.so
文件
,类似于Windows的dll
文件
)、动态加载
函数
库
(对
Linux_Kernel
4,465
社区成员
17,462
社区内容
发帖
与我相关
我的任务
Linux_Kernel
Linux/Unix社区 内核源代码研究区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章