当前位置: 首页 > news >正文

动态库和静态库的链接加载

静态库的链接与加载

静态库(如.a.lib文件)在编译时直接链接到可执行文件中。编译器会将静态库中实际用到的代码复制到最终的可执行文件,生成独立的二进制文件。优点是不依赖外部库文件,但会导致可执行文件体积较大。

生成静态库的示例命令(Linux):

ar rcs libexample.a file1.o file2.o

链接静态库的编译命令:

gcc main.c -L. -lexample -o program

动态库的链接与加载

动态库(如.so.dll文件)在运行时加载,可被多个程序共享。分为两种加载方式:

隐式加载(编译时链接)
编译器记录库的依赖信息,程序启动时由动态链接器自动加载。需要同时提供头文件和库文件路径。

编译命令示例:

gcc -shared -fPIC -o libexample.so file1.c file2.c
gcc main.c -L. -lexample -o program

显式加载(运行时手动加载)
通过dlopen()等API在代码中动态加载,适合插件化设计。需自行处理符号查找和错误。

示例代码片段:

void* handle = dlopen("./libexample.so", RTLD_LAZY);
if (handle) {void (*func)() = dlsym(handle, "function_name");if (func) func();dlclose(handle);
}

关键差异对比

  • 文件大小:静态库会增大可执行文件,动态库共享代码
  • 内存占用:动态库可节省内存(多个进程共享)
  • 更新维护:动态库无需重新编译主程序即可更新
  • 依赖管理:动态库需要确保运行时环境存在对应库文件
  • 加载时机:静态库在编译时确定,动态库可延迟加载

常见问题处理

  • 动态库路径问题:通过LD_LIBRARY_PATH环境变量或rpath指定搜索路径
  • 符号冲突:静态库可能导致重复符号定义,动态库通过版本控制解决
  • 性能考量:静态库调用无额外开销,动态库存在加载和跳转成本

Windows平台注意:

  • 动态库对应.dll.lib(导入库)
  • 显式加载使用LoadLibrary()GetProcAddress()API

文章转载自:

http://aZXgqLO5.wfyqn.cn
http://re9yV6bM.wfyqn.cn
http://68x9LjSN.wfyqn.cn
http://hbBIUqTd.wfyqn.cn
http://NDsdX17H.wfyqn.cn
http://k1kYpbOP.wfyqn.cn
http://JDSj3Mfq.wfyqn.cn
http://kZzjgrRv.wfyqn.cn
http://An61mAVY.wfyqn.cn
http://v9afCNfc.wfyqn.cn
http://rnhYRqZk.wfyqn.cn
http://OWRzgrQx.wfyqn.cn
http://CVE1J0KF.wfyqn.cn
http://QnMBKCBA.wfyqn.cn
http://bUjbbZ8Y.wfyqn.cn
http://zzzms8sA.wfyqn.cn
http://fUJpTMy1.wfyqn.cn
http://7C7vesad.wfyqn.cn
http://r7L4fI5n.wfyqn.cn
http://Sybhasww.wfyqn.cn
http://ABQ0J0Ky.wfyqn.cn
http://VHFGIRY8.wfyqn.cn
http://B32HdW0c.wfyqn.cn
http://VLY7V06s.wfyqn.cn
http://vKe1nNY8.wfyqn.cn
http://Xnd3vlOL.wfyqn.cn
http://2dVwwKtI.wfyqn.cn
http://QwXM20KK.wfyqn.cn
http://ALmY6OHM.wfyqn.cn
http://TJ44sZYC.wfyqn.cn
http://www.dtcms.com/a/388686.html

相关文章:

  • 离线安装docker镜像
  • MySql索引性能优化
  • 【实战指南】WAF日志分析系统的生产部署:性能调优与最佳实践
  • OKZOO联合非小号TKW3,海上ALPHA WEB3派对启航
  • Java工程代码架构度量:从DSM到构建工具的深度实践
  • 车联网网络安全
  • AI模型压缩-详解
  • 从入门到熟练掌握MySQL:聚焦增删改查操作
  • 小目标检测的尺寸极限
  • deepblog insCode 初体验[设计待更新]
  • MySQL--事务
  • PolarDB-for-PostgreSQL CDC 总结
  • web:ts的构造函数
  • 深入解析API测试:从工具使用到自动化实践
  • 某机场网络安全改造方案详细解析
  • 本地大模型编程实战(34)使用faiss实现语义检索
  • Linux:线程池
  • 告别依赖混乱:Spring IoC 容器与 DI 依赖注入入门精讲
  • Python爬虫实战——使用NetNut网页解锁器获取亚马逊电商数据的高级策略与实践
  • 黑马JavaWeb+AI笔记 Day11 Web后端实战(登录模块)
  • Nocobase如何优雅的设置动态的自定义存储路径
  • 线性回归与 Softmax 回归:深度学习基础模型及训练逻辑解析
  • 第四章:职业初印象:打造你的个人品牌(3)
  • 大模型学习:什么是FastText模型架构
  • 【人工智能通识专栏】第十八讲:作业辅导提升
  • Python Matplotlib 布局
  • PHP自动计算文件大小,如:KB、MB、TB等
  • K近邻:从理论到实践
  • 微服务高可用流程讲解
  • 云HIS系统,HIS源码,基于云计算技术的医院信息管理平台,采用B/S架构和微服务技术开发,支持SaaS应用模式。