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

  • 相关阅读:
    SQLalchemy 查询总结
    da,da_driver
    sqlalchemy foreign key查询和backref
    ERROR 1045 (28000)
    bridge 上网
    sqlacodegen
    sqlalchemy
    (转)TComboBox patch for Delphi 7
    delphi xe7 FireDAC 官方文档
    Delphi Variant oleVariant
  • 原文地址:https://www.cnblogs.com/ginkgo-leaf/p/7683414.html
Copyright © 2011-2022 走看看