静态库与动态库_笔记

C++编译链接 静态库动态库技术笔记 本文介绍了C++编译链接过程及静态库与动态库技术。编译将源代码转换为机器代码,生成目标文件(.o/.obj);链接将目标文件和库文件组合成可执行文件,分为静态链接(直接打包库代码)和动态链接(运行时加载)。静态库包含头文件(.h)和库文件(.lib),动态库还需动态链接文件(.dll)。文章详细说明了Visual Studio中配置静态库和动态库的步骤,并比较了二者的优缺点:静态库独立但体积大,动态库模块化便于更新但依赖外部文件。此外还介绍了Debug(含调试信息)和Release(优化后)版本的区别。 阅读详情

参考文章:

Linux编译多个不同目录下的文件以及静态库、动态库的使用

http://blog.youkuaiyun.com/luotuo44/article/details/16970841

linux 动态库 静态库原理分析

https://blog.youkuaiyun.com/li_wen01/article/details/88979118

 

文件布局如下:

1、编译静态库

在function目录下,执行命令 $g++ -c sub.cpp add.cpp 生成sub.o和add.o文件,然后打包生成静态库,即.a文件

$ar -cr libhead.a add.o sub.o
-c :  代表create,创建.a文件
-r :  代表replace

注意:

1) 命令中,.a文件要放在.o文件的前面

2) .a文件的格式: 以lib为前缀,.a为后缀,例如 libhead.a

可以使用 $ar -t libhead.a 查看libhead.a文件中包含哪些目标文件,执行结果为 add.o  sub.o

 

输入命令生成可执行文件:

$g++ main.cpp -Ifunction -Lfunction -lhead -o main

-I( 大写i ) 头文件位置

-L 静态库目录

-l( 小写L ) 静态库

 

2、动态库

$g++ -c -fPIC add.cpp sub.cpp 生成位置无关的目标文件

$g++ -shared -fPIC add.o sub.o -o libhead.so 生成.so动态库

$g++ -Ifunction -Lfunction -lhead main.cpp -o main 利用动态库生成可执行文件

 

当静态库和动态库同时存在时,系统优先使用动态库

 

ldd命令:查看可执行程序依赖哪些库

nm命令:查看库中有哪些函数

动态库的路径问题

为了让执行程序顺利的找到动态库,有三种方法: 
(1) 把库拷贝到/usr/lib和/lib目录下。 
(2) 在LD_LIBRARY_PATH环境变量中加上库所在路径。 
(3) 添加/etc/ld.so.conf.d/*.conf文件,把库所在路径加到文件末尾,并执行ldconfig刷新。 
这样,加入的目录下的所有库都可见。

4)编译指定动态库位置(注意不再使用-L和-l)

$g++ -Ifunction ./libhead.so main.cpp -o main

或者,使用选项-Wl,-rpath,XXXX.其中XXXX表示路径。

别再只会用Kriging了!用Python+GeoPandas手把手实现IDW插值(附完整代码与可视化) 本文详细介绍了如何使用Python和GeoPandas实现反距离加权插值(IDW),包括核心算法、参数调优和可视化技巧。通过完整代码示例,帮助读者掌握这一空间数据分析技术,适用于环境监测、气象预报等多个领域,提升数据处理效率和灵活性。 阅读详情

相关推荐

Zynq工程IP核封装:XCI引用与约束继承实战指南

IP核封装是FPGA系统设计中实现模块复用、团队协作与技术资产沉淀的关键环节。其本质是将功能逻辑、时序约束、接口协议和硬件配置统一抽象为可配置、可验证、可演进的标准化组件。核心原理在于通过XCI文件保留IP核的参数化定义能力,依托Vivado IP Packager实现约束继承、端口自动映射与时钟域解耦,从而保障跨项目集成的时序可信性与约束完备性。该技术广泛应用于Zynq SoC视频处理、高速接口(如HDMI/TMDS)、多时钟域控制系统等场景,尤其在需要长期维护与版本迭代的工业级嵌入式开发中具有不可替代的

weixin_42593701的博客 122

动态库和静态库

动静态库的制作和使用!!!

学代码的咸鱼的博客 6530

白盒测试逻辑覆盖之谓词覆盖、子句覆盖、三类有效字句覆盖等知识点

本篇笔记会简化书本上的概念,用容易理解的方式来说明,有些例子打字麻烦,我会直接放图片! 目录 基础知识: 谓词覆盖predicate coverage 子句覆盖 clause coverage 组合覆盖 combinatorial coverage 有效字句覆盖Active Clause Coverage 广义有效子句覆盖(General Active Clause Coverage) 相关性有效子句覆盖(Correlated Active Clause Coverage) 限制性有效

weixin_46019681的博客 2663

静态库和动态库

库可以简单地看成一种代码仓库,他提供给使用者一些可以直接拿来使用的变量,函数和类;它也是一种特殊的程序,但是库不可以单独运行;库可分为两种,一种是静态库,一种是动态库,区别是静态库在程序的链接阶段会被复制到程序中,而动态库顾名思义,在运行时才调入内存。库的好处:代码保密,方面部署和分发。

qq_53004789的博客 2475

深度强化学习研究笔记(1)——入门(马尔科夫决策过程,贝尔曼方程,价值迭代和策略迭代)

1. 强化学习(Reinforcement learning)概述 强化学习(Reinforcement learning)的基本内涵是将问题用代理和环境进行建模。其中代理能够对环境执行一些特定的动作a∈Aa \in Aa∈A,从而到达某个状态s∈Ss \in Ss∈S,然后我们就可以根据该状态为代理赋予特定的奖励rrr。强化学习的基本思想如下图所示: 代理的目标是最大化未来的奖励总和,它通过将...

越野者的博客 5280

重带电粒子的能量歧离(energy straggling)

能量歧离,Bethe-Bloch

G751888629的博客 2298

对于动态库静态库的一些笔记

111

hua15617159775的博客 209

华为od面试手撕真题【分解质因数】

华为od面试手撕真题【分解质因数】

MISAYAONE的博客 1126

静态库和动态库 笔记

爱编程的大丙 学习笔记 3、静态库和动态库 程序中调用的库有两种 静态库和动态库,不管是哪种库文件本质是还是二进制的源文件。 在项目中使用库一般有两个目的,一个是为了使程序更加简洁不需要在项目中维护太多的源文件,另一方面是为了源代码保密,毕竟不是所有人都想把自己编写的程序开源出来。 3.1 静态库 在 Linux 中静态库由程序 ar 生成,现在静态库已经不像之前那么普遍了,这主要是由于程序都在使用动态库。关于静态库的命名规则如下: 在 Linux 中静态库以 lib 作为前缀,以.a 作为后缀,中间

ClimberCoding 697

使用Python爬虫抓取公共交通网站的时刻表

Python爬虫是一种通过自动化方式从网页中抓取数据的程序。爬虫通过模拟用户请求,获取网站的HTML页面内容,并通过解析这些HTML内容,提取出我们需要的信息。requests:用于向网站发送HTTP请求并获取响应。:用于解析HTML文档,提取数据。Selenium:用于处理动态加载的网页,模拟浏览器操作。pandas:用于数据处理和分析,方便存储和操作抓取到的数据。本文介绍了如何使用Python爬虫抓取公共交通网站的时刻表,并提取其中的关键信息。我们使用了requestsSelenium和。

2201_76125261的博客 1119

使用 Visual Studio Code 搭建 SAP UI5 本地开发环境

工欲善其事,必先利其器。时至今日,SAP 提供了非常多的 SAP UI5 开发工具,既包含本地搭建的,也包含浏览器里远端使用的工具,比如 WebIDE 和 Business Application Studio. 我们访问下面这个链接,就能找到所有这些工具的安装或者配置步骤: https://tools.hana.ondemand.com/#sapui5 如果想选择本地开发,SAP 推荐的工具是 Visual Studio Code,也就是本文要介绍的内容。 也可以下载 WebIDE 的本地安装包,将其安

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1万+

HeadFirstC笔记_8 静态库与动态库:热插拔代码

#include中的尖括号代表标准头文件 如果在 #include 语句中使用尖括号,编译器就会在标准头文件目录中查找头文件,而不是当前目录。 为了用本地头文件编译程序,需要把尖括号换成双引号("xxx.h"): #include // 标准头文件#include "encrypt.h" // 本地头文件#include "checksum.h" 标准头文

大道至簡的博客 1350

华为OD机考2025B卷 - 报文响应时间(Java & Python& JS & C++ & C )

华为OD机考2025B卷 - 报文响应时间

算法大师! 8082

【Linux笔记】动态库与静态库的制作

库就像是编程世界里的 “工具包”,里面装着别人已经写好的代码模块,可以直接拿过来用。比如你要建一座房子,不需要自己炼铁造钉子,直接买现成的钉子(库)就能加快速度。静态库(.a/.lib)特点:编译时 “打包” 进你的程序,变成程序的一部分。比喻:像外卖套餐里的固定配菜,直接塞进你的饭盒带走。优点:独立运行,不需要额外依赖;缺点:程序体积变大,修改库后需要重新编译整个程序。动态库(.so/.dll)特点:运行时才 “链接” 到程序,程序和库是分开的文件。

GGDxianv的博客 1093

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

静态库和动态库学习笔记

库是写好的、可以复用的代码,是一种可执行代码的二进制形势,可以被操作系统载入内存执行。库文件是事先编译好的。编译过程图。

guozhensong的博客 1828

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

静态库与动态库笔记

库

weixin_44971209的博客 194

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

C++笔记 静态库和动态库详解

定义:运行时库 静态库 动态库 运行时库:Unix中一个典型的运行时库例子就是libc,它包含标准的C函数,如,print(),exit()等等,用户能创建他们自己的运行库(在Windows中是DLL),而具体的细节依赖编译器和操作系统的。 静态库:函数和数据被编译进一个二进制文件(通常扩展名为.lib),静态库实际上是在链接时被链接到EXE的,库本身不需要与可执行文件一起发行。 动态库:用VC++创建的动态库包含两个文件,一个lib文件和一个dll文件,这个lib文件就是引入库,不是静态库,引入库有时

weixin_40933653的博客 2240

笔记:动态库,静态库

NOTE 一、动态库,动态库 说明:将源码翻译成目标文件之后,打包成库文件。 1、静态库 静态库名:lib库名.a 归档命令:将文件列表归档到lib库名.a 中 ar -rsv lib库名.a 文件列表 查看命令:输出lib库名.a归档文件中的文件列表 ar -t lib库名.a 链接库编译:(ps:不需要lib,只需要库名。若不指定位置,默认从系统目录查询) gcc/g++ 源文件列表 -L 位置 -l 库名 优点:不会因静态库的丢失而导致程序运行失败(已经成为程序

m0_48334818的博客 168

静态库、动态库学习笔记

静态库、动态库学习笔记 库:是一种可执行代码的二进制形式,可被操作系统载入内存执行;是写好的、现有的、完善的可复制的代码。 库可分为静态库(.a或.lib)和动态库(.so或.dll)。 动静之分是因为链接阶段对库的处理不一样导致。 程序编译成可执行文件的过程:预处理–>编译–>汇编–>链接–>可执行文件。 静态库:在链接阶段,将汇编生成的目标文件.o与引用到的库一起链接打...

weixin_40402862的博客 254

静态库和动态库的笔记

库是一个二进制文件,其所包含的代码可以被程序调用。Linux下有两种库,分别为静态库和动态库。

INPO_T的博客 247

c++编译动态库静态库笔记以及动态库

假设既有一个这样的目录 其中include和src文件夹包含了头文件和原始代码文件,main.cpp调用swap.cpp main.cpp代码如下: #include <iostream> #include "swap.h" using namespace std; int main(int args,char **argv) { int val1=10; int val2=20; cout<<"before swap:"&lt...

chenmingwei000的博客 354

Linux静态库与动态库学习笔记

Ubuntu下有两种库:动态库和静态库(共享库) 库的本质是可执行的二进制码,库的作用就是复用。静态库在链接期间把库文件加到主程序中,而动态库则是运行时再加载进去。 二者的不同点在于代码被载入的时刻不同。 静态库的代码在编译过程中已经被载入可执行程序,因此体积比较大。 动态库(共享库)的代码在可执行程序运行时才载入内存,在编译过程中仅简单的引用,因此代码体积比较小。 不同的应用程序如果调......

$好记性还是要多记录$ 973

静态库与动态库相关知识笔记

1. ldd 可查看程序需要哪些动态库 命令 命令解析 nm 可查看程序,库里有哪些函数 file 可查看文件的类型 objdump -D 反汇编.o/.a/.so/elf可执行文件 2. 制作静态库 (test1.c test2.c) 命令 gcc test1.c -c -o test1.o 编译为目标文件 gcc test2.c -c -o te...

mianhuantang848989的专栏 273
上一篇: select()函数_笔记
下一篇: 建立samba服务器
benjamin721
博客等级 码龄14年 18粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值