简谈链接库

链接库是什么 链接库指的就是程序在链接阶段使用的代码库。程序载入内存之前完成链接工作的,称为静态链接库;程序载入内存以后完成链接工作的,称为动态链接库。静态链接库和动态链接库各有优缺点,要根据实际的项目需求和约束条件选择合适的链接方式。 阅读详情

 

 

链接库包括动态链接库和静态链接库,其中动态链接库又称为共享库。静态链接库文件以.a, .lib为后缀;而动态链接库以.so, .dll为后缀。关于链接库,简单来说有以下几个方面要涉及到:

1 链接库的概念?

链接库本质上都是目标文件的集合,在编译链接过程中作为输入。

静态链接库,链接过程中从链接库中找到程序中所使用到的函数或者变量的定义,将其“拷贝”到所编译的程序中,被"拷贝"的这部分(注意是部分,而不一定是全部)代码在物理上就成为可执行程序的一部分;使用静态库编译的程序可以离线独立执行,但是生成的可执行文件较大。

动态链接库,在编译链接时需要提供显示指定动态链接库的路径,编译器会在其中查找当前编译的程序文本中没有的函数或者变量的定义,找到这些定义即可,并不像使用静态库那样进行定义的“拷贝”,找不到相关定义则报链接错;此外,动态链接库在可执行程序启动时还需动态加载,因此,链接动态库的可执行程序不能单独执行,必须提供动态链接库的路径。动态链接库可被多个程序共享,因此也称之为共享库。

值得注意的是,链接库中如果有定义和当前编译的程序文本的定义重复时,会被忽略,编译器默认使用程序中的定义,但并不会报告重定义错误;这点与直接使用.o文件进行编译是不一样的。

 

 

2 为什么要使用链接库?

a.实现代码共享

b.提高程序执行效率

c.代码模块化

d.安全性上的考虑

 

3 动态链接和静态链接的区别?

a.动态链接:真正意义上的代码共享,多个模块可以使用同一个动态链接库

   静态链接:实际上是代码拷贝,并不是真正的共享

b.动态链接:存储压力小

  静态链接:做拷贝,占用较多内存

c.动态链接:动态装载较慢,运行时载入造成延迟。

  静态链接:代码在静态装载,没有运行时延迟

d.动态链接:容易升级维护,在接口发生变化时,直接替换动态库即可

  静态链接:静态库需要重新编译

e.动态链接:动态链接库需要发布,使得程序的可移植性较之使用静态链接库的程序要差

 

 

4 如何使用链接库?

 

以gcc为例:

可以直接在命令行指定生成动态链接库,如:gcc -fPIC -shared -o libxxx.so *.c。fPIC指定生成位置无关代码(因为动态链接库在动态加载),PIC亦即Position Independent Code(位置无关代码)。

从目标文件生成静态链接库,如: ar crv -o libxxx.a *.o。

 

使用链接库文件,最好在环境变量LD_LIBRARY_PATH中加入库文件的路径,或者也可以直接在命令行通过-L选项指定,如:

gcc -o exe -L ~/path -lxxx。 xxx即libxxx.a(so)

 

未完待续 ... ...

 

 

 

 

 

IEEE Std 802.11 -2007 IEEE Std 802.11 -2007 PDF 格式 立即下载

相关推荐

变邻域搜索(VNS)原理梳理和应用细节-附求解VRPTW问题C++代码

文章目录1、简介-introduction2、VNS的基本机制2.1 变邻域下降方法-Variable Neighborhood Descent2.2基本变邻域搜索方法-Basic Variable Neighborhood Search2.3 终止准则3、VNS的拓展和混杂算法3.1 VNS的拓展3.2 变邻域分解搜索-Variable Neighborhood Decomposition Search3.3 偏变邻域搜索-Skewed VNS3.4 并行变邻域搜索-Parallel VNS4、VNS和其

dragon Fly的博客 6826

Linux中动静态库的生成与使用

Linux中动静态库的生成与使用

siyi441的博客 598

抖音X-Medusa风控逆向:unidbg环境重建与魔改AES还原

X-Medusa并非传统加密算法,而是深度耦合运行时环境的动态混淆系统,其核心是硬件指纹感知、线程上下文绑定与非标AES变异。理解其原理需跳出‘找密钥’思维,转向对CPU型号、系统属性、微秒级时间及内存布局的综合建模。技术价值在于将不可控的客户端风控,转化为可复现、可配置、可运维的服务化能力;典型应用场景包括合规数据采集、API协议适配与移动安全研究。本文聚焦Android native层逆向实践,基于unidbg实现高保真环境模拟,并完整还原S-Box动态生成、MixColumns矩阵变异与轮密钥XOR扰

weixin_33783283的博客 686

c语言dll的一个对外函数接口_简谈动态链接库DLL

1、DLL是什么DLL文件即动态链接库文件(Dynamic Link Library),是Windows系统中封装代码和数据以及实现资源共享的一种方式,当然本质上它就是一个已经编译好的机器指令文件。动态链接,指的是程序运行时,有需要才去调用某个DLL。库,指的是一般一个DLL里会包含各种函数并对外提供API。一般就和开发中自定义的模块类似,可以将DLL通俗理解为具有某些功能的箱子,箱子里存放着已经...

weixin_33680447的博客 1133

手把手教你用STM32F303和LAN9252搭建EtherCAT从站(附IO/AD/DA完整代码)

本文详细介绍了如何使用STM32F303和LAN9252搭建EtherCAT从站,涵盖硬件选型、开发环境配置、协议栈移植及IO/AD/DA功能实现。通过实战指南和完整代码,帮助开发者快速掌握工业自动化中的实时通信技术,提升系统性能与可靠性。

weixin_26802933的博客 235

RocketMQ5.3.0-control-多 Master 多 Salve-异步复制-集群搭建

RocketMQ5.3.0-control-多 Master 多 Salve-异步复制-集群搭建(详细文档)

m0_52369979的博客 731

静态链接库与动态链接库详解

以下内容源于C语言中文网相关内容的学习整理,如有侵权请告知删除。

主要记录嵌入式学习与开发过程。 9307

【Bug已解决】openclaw command not found / openclaw not installed — OpenClaw CLI 安装失败解决方案

安装 OpenClaw 后命令未找到或运行失败,本质是 PATH 未配置或 Python 版本不兼容。文中给出修复 PATH、使用虚拟环境、检查 Python 版本、pipx 安装等完整方案。

一键难忘的博客 8065

静态链接库和动态链接库

一、静态链接库和动态链接库 1、制作方法 2、动态库制作中extern “C” _declspec(dllexport)导出,才会生成lib文件 3、查看动态库生成的接口 二、静态链接和动态链接 1、静态库的链接 2、动态库的链接 1)LoadLibrary、GetProcAddress、FreeLibrary 2)导出lib的动态库可根据lib和头文件隐式链接 三、 #ifdef TESTDLL_EXPORTS #define TESTDLL_API __declspec(dllexport) #else

qq_43148810的博客 4935

Python之ae-toolbox包语法、参数和实际应用案例

ae-toolbox(全称 after-effects-toolbox)是 Python 生态中专门用于 Adobe After Effects(AE)自动化操作 的工具包,基于 AE 的 ExtendScript(JSX)桥接技术,实现 Python 与 AE 的跨语言通信。

王国平的博客 1174

OpenClaw 子代理配对失败问题分析与解决方案

OpenClaw子代理配对失败问题分析与解决方案 问题核心在于agent设备权限不足,仅有operator.approvals权限而缺少operator.admin权限,导致子代理启动时形成权限死锁。本文提供三种解决方案: 直接编辑设备配对文件(推荐):修改本地JSON文件,为agent设备添加完整operator.admin权限,操作简单快捷。 标准重新配对流程:删除现有agent设备后重新配对,通过正常审批流程获取完整权限,符合系统安全设计。 修改源码降低权限要求(仅限开发环境):调整子代理代码避免强制

多媒体编程、网络编程、系统编程、网络安全编程、驱动编程 150

6、静态链接库、动态链接库

静态链接库、动态链接库

融码一生:专注 Python、C/C++、Linux、机器学习 & 深度学习、NLP、算法领域分享 1611

吊打BEVFormer!GaussianBeV实战:用3D高斯开启BEV分割新范式

GaussianBeV是一种基于3D高斯建模的BEV分割新方法,在自动驾驶感知任务中实现了SOTA性能。其核心创新在于将场景元素表示为3D高斯分布,通过均值、协方差和权重精确描述物体位置、形状和置信度,相比传统BEV方法具有更强的空间建模能力。文章详细介绍了GaussianBeV的原理、环境配置、训练推理流程及其在自动驾驶和城市3D重建中的应用,并讨论了优化方向和未来发展趋势。该方法在nuScenes等数据集上表现出色,为BEV分割任务提供了新的解决方案。

m0_71589036的博客 106

简谈GCC那些事

将自己学习的gcc通过实例记录学习。

qq_39176876的博客 1853

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

【基础】动态链接库/静态链接库的区别

C或C++程序从源文件到生成可执行文件需经历4个阶段分别为预处理、编译、汇编和链接。链接阶段所要完成的工作,是将同一项目中各源文件生成的目标文件和程序中用到的库文件整合为一个可执行文件。虽然库文件明确用于,但编译器提供了2种实现链接的方式,分别称为静态链接和动态链接。采用静态链接方式实现链接操作,的库文件称为静态链接库;采用动态链接方式实现链接操作,的库文件称为动态链接库。在Linux发行版系统中,静态链接库文件的后缀名通,动态链接库的后缀名通;,动态链接库的后缀名。...

weixin_41838721的博客 8123

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

静态链接库和动态链接库的区别

目录 1、链接库概述 2、静态链接库 2.1、编辑测试文件 2.2、将.c 编译生成 .o文件 2.3、由 .o 文件创建.a静态库 2.4、在程序中使用静态库 2.5、生成目标程序main,然后运行 3、动态库(隐式链接) 3.1、由 .o创建.so动态库 3.2、隐式方式使用动态库 3.3、动态库的初始化和解析 1、动态库的构造和析构函数机制 2、全局变量初始化 4.........

weixin_36670529的博客 4372

动态链接库和静态链接库的区别

静态连接库就是把(lib)文件中用到的函数代码直接链接进目标程序,程序运行的时候不再需要其它的库文件;动态链接就是把调用的函数所在文件模块(DLL)和调用函数在文件中的位置等信息链接进目标程序,程序运行的时候再从DLL中寻找相应函数代码,因此需要相应DLL文件的支持。  静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib 中的指令都全部被直接包含在最终生成的

4万+

【C++】中动态链接库和静态链接库的区别

动态链接适用于那些希望减少最终二进制文件大小、允许独立更新库代码或需要在多个程序间共享库代码的情况。静态链接则更适合于那些需要确保二进制文件独立运行、不依赖于外部文件或需要更严格控制版本的应用场景。选择哪种方式主要取决于项目的具体需求、目标平台以及开发团队的偏好。

wangnaisheng的专栏 1753

静态链接库、动态链接库使用方法

总结一下动态链接库和静态链接库。

尽人事,听天命 4550

静态链接库与动态链接库

静态库与动态库

Star_ID的博客 1773

Linux拓展:链接库

Linux下实现链接库,同时助于了解makefile,与Windows下实现链接库一起对比分析。

墨城烟柳ベ旧人殇的博客 2073

Linux_静态链接库与动态链接库

Linux平台下如何生成、调用静态库及动态库

zw_whusgg的博客 1476
上一篇: Install LLVM on CentOS-5
下一篇: Linux autotools使用简介
IEEE2007
博客等级 码龄20年 4粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值