首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux动态(.so)和静态(.a) 区别

linux下有两种:动态静态(共享) 二者不同点在于代码被载入时刻不同。 静态代码在编译过程中已经被载入可执行程序,因此体积比较大。...静态动态最大区别,静态情况下,把直接加载到程序中,而动态链接时候,它只是保留接口,将动态程序代码独立,这样就可以提高代码可复用度,和降低程序耦合度。....2 (0xb7f12000) 在上例中,动态libd.so执行程序在同一目录下,如果将libd.so移走再执行程序,程序将不能正常执行。...总结: 编译静态时先使用-c选项,再利用ar工具产生.编译动态方式依不同版本UNXI而定。隐式调用动态静态用法相一致,而显示调用动态则需要借助动态加载共享库函数族。...隐式调用动态静态使用方法一致,使用静态和使用动态编译成目标程序使用gcc命令完全一样,那当静态动态同名时,gcc命令会使用哪个文件呢?

16.5K21

动态静态优缺点比较分析_c静态动态区别

动态静态优缺点比较 (2012-10-18 15:31) 我们在编写一个C语言程序时候,经常会遇到好多重复或常用部分,如果每次都重新编写固然是可以,不过那样会大大降低工作效率,并且影响代码可读性...,也可以说库文件已经是机器码文件了,静态和共享加载过程有很大区别。...不过由于运行时要去链接会花费一定时间,执行速度相对会慢一些,总的来说静态是牺牲了空间效率,换取了时间效率,共享是牺牲了时间效率换取了空间效率,没有好区别,只看具体需要了。...总结: 一、类型 (一) 在windows中 .dll 动态 .lib 静态 即为源代码二进制文件 (二) 在linux中 .so 动态 .a 静态 (三) 静态动态优缺点...本文仅限于介绍linux 2.种类 linux有两种:静态和共享动态)。 二者不同点在于代码被载入时刻不同。

3.1K20
您找到你想要的搜索结果了吗?
是的
没有找到

静态动态区别

问题 静态动态有什么区别? 回答 后缀名不同 动态后缀,在 Windows 上是 .dll,linux 上是 .so,在 OSX 上是 .dylib。...静态,在 WIndows 上是 .lib,linux 上是 .a。...扩展性兼容性不一样 如果静态中某个函数实现变了,那么可执行文件必须重新编译,而对于动态链接生成可执行文件,只需要更新动态本身即可,不需要重新编译可执行文件。...正因如此,使用动态程序方便升级和部署。 依赖不一样 静态链接可执行文件不需要依赖其他内容即可运行,而动态链接可执行文件必须依赖动态存在。...加载速度不一样 由于静态在链接时就和可执行文件在一块了,而动态在加载或者运行时才链接,因此,对于同样程序,静态链接要比动态链接加载更快。所以选择静态还是动态是空间和时间考量。

1.5K20

静态动态区别

回顾一下,将一个程序编译成可执行程序步骤: ? 静态: 之所以成为【静态】,是因为在链接阶段,会将汇编生成目标文件.o引用到一起链接打包到可执行文件中。因此对应链接方式称为静态链接。...试想一下,静态汇编生成目标文件一起链接为可执行文件,那么静态必定跟.o文件格式相似。...2、程序在运行时函数再无瓜葛,移植方便。 3、浪费空间和资源,因为所有相关目标文件牵涉到函数被链接合成一个可执行文件。...通过上面的介绍发现静态,容易使用和理解,也达到了代码复用目的,那为什么还需要动态呢? 为什么还需要动态? 为什么需要动态,其实也是静态特点导致。 1、空间浪费是静态一个问题。 ?...动态在程序运行是才被载入,也解决了静态对程序更新、部署和发布页会带来麻烦。用户只需要更新动态即可,增量更新。 ? 动态库特点总结: 1、动态把对一些库函数链接载入推迟到程序运行时期。

1.9K90

Linux动态静态底层比较

1 前言 我们前两篇文章讲解了如何建立动静态如何使用动静态。 接下来我们就来深入聊聊动静态。...2 编译使用比较 那么 gcc编译时候是怎么进行: gcc不加-static选项默认使用动态,没有提供动态就只能使用静态 gcc加-static选项就使用静态 那么-static意义是什么呢...将我们程序进行静态链接,这就要求我们链接任何都要通过对应静态版本!!! 一般我们操作系统都是动态 并且在对.o文件打包时候: 静态使用ar -rc 文件名......静态很简单,不需要考虑这么多,因为在编译期间就把静态内容拷贝到了可执行文件当中。就不必谈论找到静态这一说了。动态就不一样,需要在运行过程中寻找加载!...所以同样加载可执行程序类似,会把动态读入内存中,并建立对应页表映射,**动态虚拟地址在进程地址空间里是在共享区里

15310

动态静态

一个动态链接可执行文件仅仅包含它用到函数入口地址一个表,而不是外部函数所在目标文件整个机器码。...动态 站在制作者角度:生成动态 动态也是,跟静态差不多,也是.o文件归档,带上相应头文件。其中区别就是多加了一个选项:-fPIC。...因此我们创建一个目录,用来存放和头文件,生成静态步骤一致。...站在使用者角度:使用第三方动态 操作方法静态一样: gcc -o mymath main.c -Imylib/include/ -Lmylib/lib/ -lmymath 可此时我们执行程序...动态加载访问加载过程: 位置无关码:就是用特定参照系来进行定位某一个人或物对应所处位置,这种相对静止方式就叫做位置无关。

2.2K30

Linux静态动态创建调用

一、前言 在项目开发时,经常会用到第三方,也会自己创建动态给别人或者给自己其他工程项目使用。 类型分为动态静态。 在Linux动态后缀为.so,静态后缀为.lib。...动态称为共享. 程序在编译时需要、运行时候也需。 静态在编译时候抽取需要使用函数进行编译、运行时候不需要静态编译程序比动态链接占用空间更加大。...二、动态创建使用案例 2.1 创建动态 创建动态语法格式: gcc -fPIC -shared -o .so 源文件名称.c 如何命名?...说明: 默认情况下系统搜索动态路径是/lib 、 /usr/lib 方法1: 直接将动态拷贝到/lib 或者 /usr/lib 目录下。 [wbyq@wbyq linux_c]$ ..../a.out 三、静态创建使用 3.1 创建静态 注意: 动态如果静态名字重名时候,编译器优先使用动态.

5.4K30

linux动态静态

;nm查看中包含那些函数、ar生成静态,查看中包含那些.o文件、ldd查看程序依赖.so文件;gcc/g++相关参数-L,-l,-fPIC,-shared;静态链接时搜索过程;动态链接时...,加载时搜索过程;动态找不到问题;依赖问题;动态升级问题步骤 一、基本概念 1.1、什么是 在 windows 平台和 linux 平台下都大量存在着。       ...1.2、 种类  linux有两种:静态和共享动态)。...在Linux下,动态静态同事存在时,gcc/g++链接程序,默认链接动态。...2、如果f是一个静态(.a),那么链接器将尝试匹配U中未解析符号静态成员(静态成员就是.o文件)定义符号。

12.3K20

Linux静态动态

其中 < 区别在于, 接下来我们编译一下,就形成了一堆 .o 和可执行程序: 所以我们想要形成一个,我们就需要将上面的所有源文件和 main 函数和 Makefile 全部删除,将剩下所有 .o...另外,如果别人给我们中既包含动态也包含静态,即同一个中提供动静态两种,gcc 默认使用动态!...首先我们要知道,在 Linux 下,形成可执行程序是 ELF 格式可执行程序,它其中包含有一张类似于符号表东西,里面包含各种函数依赖以及地址,符号表就是动态链接这些动态。...,所以未来这个在内存任意位置加载,库里面的所有函数地址都不变,所以这就叫做位置无关码!...所以动态采用就是一种相对编址方式,然后就可以做到动态位置无关性,所以以前在 gcc 中形成动态需要加上 fPIC,形成位置无关码。 3.

16610

linux 动态 静态_静态库里面包含动态

动态静态 文件系统补完 文件三个时间acm 动态静态 动态链接静态链接 静态动态静态对比 生成静态 打包静态 使用静态 生成动态 打包动态 使用动态 文件系统补完...可以使用:1.,包括静态动态。2.开源代码。3.基本网络功能调用,比如各种网络接口、语音识别等等。 这其中,我们将详细介绍静态动态。...动态链接静态链接 一般情况下,为了更好支持开发,第三方或者是语言,都必须提供静态动态,这是方便程序员根据需要进行bin(二进制文件)生成。...静态动态 一般命名方式为lib+名字+.a比如C语言提供标准静态名字就是libc.a。 静态是指程序在编译链接时候把代码链接到可执行文件中。...而加载动态程序运行速度相对较慢,因为动态运行时加载,映射到虚拟地址空间后需要重新根据映射起始地址计算函数/变量地址。 静态之相反,其运行速度相对较快,但消耗资源较多。

7.3K20

Linux静态动态

一、动态静态 具体动态静态相关内容点击跳转 Linux一般分为动态静态静态(.a):文件以.a为后缀,程序在编译链接时候把代码链接到可执行文件中。...程序运行时候将不再需要静态 动态(.so):文件以.so为后缀,程序在运行时候才去链接动态代码,多个程序共享使用代码。...究竟是动静态,取决你提供动态还是静态。...---- 四、制作动态 首先我们需要把文件全部编译成.o文件,这里静态不同,需要带上选项 -fPIC,形成位置无关码: gcc -c -fPIC my_add.c 什么是位置无关码目标二进制文件...,也就具备了起始地址,通过偏移地址和起始地址这样就可以找到访问函数: 系统层面上会维护动态起始地址,直接建立页表内存映射,也就可以跳转访问了,所以动态加载一次就可以被多个进程共同使用了。

25030

Linux基础——gcc编译、静态动态(共享

优点: 寻址方便,速度快 在链接时被打包到可执行文件中,直接发布可执行程序即可以使用 缺点: 静态代码被加载到可执行程序中,因此体积过大 如果静态函数发生改变,必须重新编译可执行程序 3、静态制作使用...测试代码目录结构如上图所示,include中存放是头文件,lib中存放静态动态,src中存放是源代码,main.c是发布代码。...优点: 节省内存 易于更新,不用重新编译可执行程序,运行时自动加载 缺点: 延时绑定,速度略慢 3、动态制作使用 测试代码目录结构静态相同。.../include -c 参数-fPIC表示生成位置无关代码 第二步:创建动态 gcc -shared -o libMyTest.so *.o 参数:-shared 制作动态 -.../app (执行失败,找不到链接,没有给动态链接器(ld-linux.so.2)指定好动态 libmytest.so 路径) 第二种方法: gcc + 源文件 + -I头文件 + libxxx.so

7.7K40

静态动态思考

前言 在上文《编译链接过程思考》评论中暴走大牙提到了静态动态依赖问题,还在群里提了几个测试样例和测试工程。...通过修改主工程依赖,以及子工程依赖关系以及打包类型,测试动态依赖静态静态依赖动态静态依赖静态情况。...扩展 如果动态B、D函数名字使用一样call_foo,调用顺序和Link Binary With Libraries相关,embeded顺序无关;(embeded只是把动态放入bundle...四个动态都需要Link和Embeded; 静态依赖动态测试样例不同,这次虽然动态A、C存在同名函数foo,但是调用时候没有冲突。...总结 静态生成只有编译,没有链接; 动态生成除了编译还有链接过程; 如果动态依赖静态,在生成动态时会将静态代码合并到动态中; 静态A依赖静态B,使用时需要在Link Binary

1.5K60

【Android NDK 开发】Android.mk 配置静态 ( Android Studio 配置静态 | 配置动态静态区别 | 动态静态打包对比 )

C 代码调用动态库函数 VIII . 动态 静态 打包对比 IX . 配置动态静态区别 X . 完整代码示例 1 . build.gradle 配置示例 2 ....动态 静态 打包对比 ---- 动态打包策略 : 使用动态 , 打包时会将所有的动态打包入 APK 文件中 , 静态打包策略 : 静态只将使用到静态打包入 APK 中 , 生成比较小...配置动态静态区别 ---- 1 . 预编译时路径不一致 : ① 动态路径 : libadd.so ② 静态路径 : libadd.a 2 ....设置预编译动态 ( native-lib 模块配置结束 ) include $(BUILD_SHARED_LIBRARY) # V . 配置动态静态区别 # 1 ....博客资源 ---- CSDN 博客地址 : 【Android NDK 开发】Android.mk 配置静态 ( Android Studio 配置静态 | 配置动态静态区别 | 动态静态打包对比

4K31

linux动态静态使用_静态使用

文章目录 动静态基本原理 认识动静态静态各自特征 静态打包使用 打包 使用 动态打包使用 打包 使用 动静态基本原理 动静态本质是可执行程序“半成品...认识动静态Linux下创建文件编写以下代码,并生成可执行程序。...此时我们可以看到,libc-2.17.so实际上就是一个共享目标文件,准确来说,这还是一个动态。 在Linux当中,以.so为后缀动态,以.a为后缀静态。...动态打包使用 打包 动态打包相对于静态来说有一点点差别,但大致相同,我们还是利用这四个文件进行打包演示: 第一步:让所有源文件生成对应目标文件 此时用源文件生成目标文件时需要携带...第二步:使用-shared选项将所有目标文件打包为动态 生成静态不同是,生成动态时我们不必使用ar命令,我们只需使用gcc-shared选项即可。

4.7K20

Linux共享静态动态详解

1、静态函数,是在程序执行前就加入到目标程序中去了 ; 2、动态函数同共享函数是一个东西(在linux上叫共享对象, 文件后缀是.so ,windows上叫动态加载函数, 文件后缀是.dll)...静态函数现在已经不在像以前用得那么多了,主要是共享函数之相比较有很多优势原因。慢慢地,大家都喜欢使用共享函数了。...不过,在一些场所静态函数仍然在使用,一来是保持一些以前某些程序兼容,二来它描述起来也比较简单。...理论上说,使用ELF格式静态库函数生成代码可以比使用共享函数(或者动态函数程序运行速度上快一些,大概1-5%。...Linux系统下,DL函数与其他函数在格式上没有特殊区别,我们前面提到过,它们创建时候是标准object格式。

8.7K10

Linux动态静态

前言 一、动态静态概念 在之前文章中,介绍过动静态概念,因此这次我们只是简单回顾一下。 Linux分为动态静态。...动态(.so):文件以.so为后缀,程序在运行时才去链接动态代码(运行时跳转到动态中,在动态中执行库函数)。多个程序共享代码。 链接本质:我们调用库函数时是如何标准联系。...总结 -I 指明头文件路径 -L 指明文件搜索路径 -l 指明要链接哪个,要带上名称(去掉前缀和后缀) 注意 gcc默认是动态链接,对于一个特定,究竟是动态链接还是静态链接取决于提供动态还是静态...四、制作动态 首先我们将文件全部编译成.o文件,这里制作静态不同是,需带上-fPIC,形成位置无关码: gcc -c -fPIC add.c 什么是位置无关码?...总结 以上就是今天要讲内容,本文介绍了Linux静态相关概念。

33720

静态动态那些事

查看静态具体内容, 静态其实就是目标文件集合 $ ar t libtest.a test.o 动态 动态(.so 、.dll ) 1.动态是在汇编过程生成,加载动态是在程序运行过程中...即将动态放置在可执行文件同级目录下 这里和静态有着很大不同之处 生成动态过程: 1....$ gcc -shared -fPIC -o libtest.so test.o 根据前面对动态静态理解,下面进一步理解动态链接静态链接 根据上面的理解,以为lib为静态,dll为动态...静态链接使用静态链接,链接器从静态链接LIB获取所有被引用函数,并将同代码一起放到可执行文件中。 关于lib和dll区别如下: (1)lib是编译时用到,dll是运行时用到。...使用静态编译lib文件,在运行程序时不需要再挂动态,缺点是导致应用程序比较大,而且失去了动态灵活 性,发布新版本时要发布新应用程序才行。

1.5K00
领券