静、动态链接库

本文详细介绍了静态库和动态库的基础知识,包括它们在Linux下的文件格式(.a 和 .so)、创建方法、链接选项、符号显示方法以及如何在程序中动态加载动态库等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

静态库:.a   动态库:.so

静态库:ar -r libx.a x.o x.o或(linux用不到)ar -q (只添加,不检查重复性) +ranlib(更新索引)。ar的其它参数:d,删除模块;p,显示/打印模块;x,释放出模块;v,更多显示信息;t,显示其中的文件。

显示.o或.so中等目标文件中的symbols:nm
显示程序使用的动态库:ldd
显示.o, .a, .so中的信息:objdump
共享库配置文件:/etc/ld.so.conf。修改:ldconfig

gcc编译选项:-fpic   链接选项:-shared

 

安装:install -d 目录名
和,install 源 目的
另,选项 -m 三或四位数字表示的权限

运行时,动态库按序在以下位置查找:
LD_LIBRARY_PATH
由ldconfig生成的/etc/ld.so.cache (edit /etc/ld.so.conf and then running ldconfig. this is the preferred location)
/lib
/usr/lib
Shared Library Search Paths: http://www.eyrie.org/~eagle/notes/rpath.html

在程序中动态加载动态库(库文件名如果不是绝对路径,则库文件在上面位置及当前目录查找):
#include
……
void *文件指针 = dlopen("库文件名", 加载选项);  /* 加载。加载选项可以为立刻载入所有函数RTLD_NOW或取得函数指针时再载入函数RTLD_LAZY;二者可以与RTLD_GLOBAL进行或操作,表示其它动态库可以引用这个库。 */
if (NULL == (char *错误字符串 = dlerror()))  /* 检查上一动态库操作的错误字符串 */
{
  函数返回值 (*函数指针)(函数参数表);
  函数指针 = dlsym(文件指针, "函数名");  /* 取得函数指针 */
  dlclose(文件指针);  /* 关闭 */
}
链接选项:-ldl

removing unused debugging information from object files: strip 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值