怎么查看头文件、so库里和函数的对应关系

1,查看某个so在Linux(Ubuntu)系统下的路径

ldconfig -p | grep xxx.so

2,查看某个 so库里有什么函数

nm -D xxx.so
或
objdump -tT xxx.so

如果输出符号T,则函数正常导出
如果输出符号U,则函数为定义
这里写图片描述

这里写图片描述

3,怎么确定头文件和库的对应关系?

rpm -qf /usr/include/pthread.h //获得包的名称
rpm -ql <包的名称> //获得包中文件的列表

例:

linux-bjpdOq:~ # rpm -qf /usr/include/securec.h
libsecurec-devel-1.1.1-004.005.x86_64
linux-bjpdOq:~ # rpm -ql libsecurec-devel-1.1.1-004.005.x86_64
/usr/include/securec.h
/usr/include/securectype.h
/usr/lib64/libsecurec.a

但是,对于系统库的文件,比如:

linux-bjpdOq:~ # rpm -qf /usr/include/dlfcn.h
glibc-headers-2.17-196.h22.x86_64

dlfcn.h是一个头文件,调用动态链接库用的,rpm -ql 查看里面全是头文件,发现没有找到库。

这时让我们回忆一下动态库的使用,库文件名为libxxx.so,除了在源码里包含头文件,我们还需要在链接这个库时用 -lxxx 参数.

因此,如果我们知道链接这个库时用的 -ldl参数,我们可以直接确定该so:

# ll /lib64/ | grep libdl
...
# nm -D /lib64/libdl-2.17.so |grep dlopen
0000000000001020 T dlopen
### 关于库头文件的使用方法 在C++编程中,库头文件的作用是声明库中的函数、类其他资源以便程序能够访问并使用这些预定义的功能。以下是有关库头文件的具体使用方法以及示例。 #### 头文件的概念 头文件通常是`.h`或`.hpp`扩展名的文件,它包含了库的接口部分,比如函数原型、宏定义、类型定义等。通过包含头文件,程序员可以在自己的代码中调用库所提供的功能[^1]。 #### 静态库与动态库的区别 - **静态库**:通常以`.lib`(Windows)或`.a`(Linux/Unix)形式存在,在编译阶段会被链接到目标程序中,最终生成一个完全独立的可执行文件。 - **动态库**:如`.dll`(Windows)或`.so`(Linux),不会直接嵌入到最终的应用程序里,而是运行时加载。这种方式减少了内存占用磁盘空间需求[^2]。 #### 如何使用库及其对应头文件? 要利用某个外部库,一般需要完成以下几个操作: 1. **包含必要的头文件** 在源码顶部加入适当的include指令来引入所需的头文件。例如: ```cpp #include "mylibrary.h" ``` 2. **配置项目设置** 如果使用的IDE环境像Visual Studio,则可能还需要调整项目的属性页,指定额外的包含目录(Include Directories)库目录(Library Directories)。对于VS2019来说,如果采用的是#pragma方式自动导入LIB文件,那么可以直接这样写: ```cpp #pragma comment(lib, "mylibrary.lib") ``` 这样做可以让编译器知道去哪里寻找实际的实现代码[^3]。 3. **链接正确的库版本** - 对于静态库而言,只需确保正确指定了`.lib`的位置即可; - 而针对DLL之类的动态库情况稍复杂些,除了上述步骤外还需考虑导出符号表等问题,并且部署应用时记得随附相应DLL副本给用户。 4. **实例化对象或者调用成员函数** 假设MyClass是从所选库里继承来的模板类别型参数T的一个具体表现形式如下所示: ```cpp MyClass<int> myObject; int result = myObject.doSomething(); ``` 以上就是基本流程概述加上简单的例子展示如何运用第三方提供的库及相关联的头部文档资料来进行开发工作了!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

造夢先森

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值