zoukankan      html  css  js  c++  java
  • 如何查看linux函数对应的库文件

    refer: http://bbs.csdn.net/topics/330158874


    查看elf文件对应的动态库文件:   ldd <文件名> 动态库文件

    你如果有足够的时间可以用 ar 将gcc编译程序时链接的相关静态库解压,能解压出很多函数。在与你的*.h中的函数对照。找到到底谁属于谁。

    当我遇到一个函数不知道所属的库的时候,我会先找到头文件所属的包,然后看看那个包(或者相关包)的.a或者.so文件有哪些,然后:
    objdump -x 库文件 | grep 函数名

    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看看符号表
    多说几句——在debian类型的机器上用dpkg或者apt-files也是类似的过程,有时候需要一些常识或者猜测,比如*-devel包都是提供头文件和静态链接库的,对应的不带-devel的包都是提供.so的。
    如果你想要找出被一个运行中的进程载入的共享库,你可以使用pldd命令,它会显示出在运行时被载入一个进程里的所有共享对象。  sudo pldd <PID>
    或者,也可以选择一个叫做pmap的命令行工具。它报告一个进程的内存映射,也能显示出运行进程的库文件依赖。  sudo pmap <PID>



    refer:
     http://blog.csdn.net/changli_90/article/details/9178017

    1. 最好知道静态库的原文件(.c),要是知道声明文件(.h)也比较好。

    2. ar -t YourFile 看其结构,找其中的原文件。

    3. 可以将库文件下到本地用UE打开,然后你就找吧。

    另外,看动态库用 nm -D lib*.so

  • 相关阅读:
    「日常训练」Single-use Stones (CFR476D2D)
    「日常训练」Greedy Arkady (CFR476D2C)
    「Haskell 学习」二 类型和函数(上)
    「学习记录」《数值分析》第二章计算实习题(Python语言)
    「日常训练」Alena And The Heater (CFR466D2D)
    Dubbo 消费者
    Dubbo 暴露服务
    Rpc
    git fail to push some refs....
    Spring Cloud (6)config 客户端配置 与GitHub通信
  • 原文地址:https://www.cnblogs.com/ginkgo-leaf/p/7683414.html
Copyright © 2011-2022 走看看