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

Linux静态动态加载

Linux当中,以.so为后缀的是动态,以.a为后缀的是静态。 在Windows当中,以.dll为后缀的是动态,以.lib为后缀的是静态。 认识了动态,那静态,又是什么呢?...动态是和目标文件链接,具体怎么链接下面会讲,而静态确不同,静态是在编译的时候,将中的代码直接拷贝到目标文件中,这就导致了我们最终形成的目标文件会很大,但优势在于形成了可执行程序后,该可执行程序可独立运行...,不再需要,但动态不行,在日常我们都会使用动态,很少使用静态。...注意上面我打包了两个,虽然看后缀一个静态,一个动态,但是其实上述的都是静态linux不是单单通过后缀来判断一个的类型,下面就来看看如何真正打包一个动态吧。...打包:使用-shared选项将所有目标文件打包为动态 生成静态不同的是,生成动态时我们不必使用ar命令,我们只需使用gcc的-shared选项即可。

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

动态静态

本文目标: ⭐认识动态静态,学会结合gcc选项,制作动静态⭐ ⭐了解动态加载过程⭐ 的一些概念: 静态(.a):程序在编译链接的时候把的代码链接到可执行文件中。...一个动态链接的可执行文件仅仅包含它用到的函数入口地址的一个表,而不是外部函数所在目标文件的整个机器码。...因此我们创建一个目录,用来存放和头文件,生成静态的步骤一致。...站在使用者角度:使用第三方动态 操作的方法静态的一样: gcc -o mymath main.c -Imylib/include/ -Lmylib/lib/ -lmymath 可此时我们执行程序...动态加载访问加载过程: 位置无关码:就是用特定的参照系来进行定位某一个人或物对应所处的位置,这种相对静止的方式就叫做位置无关。

2.2K30

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静态动态

另外,如果别人给我们的中既包含动态也包含静态,即同一个中提供动静态两种,gcc 默认使用动态!...引入概念 我们上面在形成动态时,还有一个问题没有讲,那就是 gcc -fPIC -c xxx.c 中的 -fPIC 选项,它的意思是位置无关码,到底是什么意思呢?接下来我们需要了解一下。...首先我们要知道,在 Linux 下,形成的可执行程序是 ELF 格式的可执行程序,它其中包含有一张类似于符号表的东西,里面包含各种函数依赖的以及地址,符号表就是动态链接这些动态的。...,所以未来这个在内存的任意位置加载,库里面的所有函数的地址都不变,所以这就叫做位置无关码!...所以动态采用的就是一种相对编址的方式,然后就可以做到动态中的位置无关性,所以以前在 gcc 中形成动态需要加上 fPIC,形成位置无关码。 3.

22610

Linux动态静态的底层比较

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

17710

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

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

7.3K20

Linux静态动态

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

26130

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.8K40

Linux共享静态动态详解

程序函数可分为3种类型:静态函数(static libraries)、共享函数(shared libraries)、动态加载函数(dynamically loaded libraries):...1、静态函数,是在程序执行前就加入到目标程序中去了 ; 2、动态函数同共享函数是一个东西(在linux上叫共享对象, 文件后缀是.so ,windows上叫动态加载函数, 文件后缀是.dll)...静态函数现在已经不在像以前用得那么多了,主要是共享函数之相比较有很多的优势的原因。慢慢地,大家都喜欢使用共享函数了。...不过,在一些场所静态函数仍然在使用,一来是保持一些以前某些程序的兼容,二来它描述起来也比较简单。...理论上说,使用ELF格式的静态库函数生成的代码可以比使用共享函数(或者动态函数)的程序运行速度上快一些,大概1-5%。

8.7K10

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动态静态

前言 一、动态静态概念 在之前的文章中,介绍过动静态的概念,因此这次我们只是简单回顾一下。 Linux中的分为动态静态。...动态(.so):文件以.so为后缀,程序在运行时才去链接动态的代码(运行时跳转到动态中,在动态中执行库函数)。多个程序共享的代码。 链接的本质:我们调用库函数时是如何标准联系的。...四、制作动态 首先我们将文件全部编译成.o文件,这里制作静态不同的是,需带上-fPIC,形成位置无关码: gcc -c -fPIC add.c 什么是位置无关码?...动态相对于静态更节省内存,静态由多个程序使用相同的库函数,加载到内存中就会导致内存中有多份重复的库函数代码,而动态则是多个程序共用一份动态,不会导致出现重复的库函数代码,就节省了内存空间。...总结 以上就是今天要讲的内容,本文介绍了Linux中的动静态的相关概念。

36820

CMake 静态动态构建

这一篇写写构建静态动态。...上一文章链接:《CMake,大型项目采用的构建工具》 对于静态动态的了解,可以看看之前的文章: 静态:《静态链接的实现》 动态:《动态链接的实现》 在上一篇文章中,我们说了内部构建和外部构建的区别...STATIC,静态 MODULE,在使用 dyld 的系统有效,如果不支持 dyld,则被当作 SHARED 对待。...EXCLUDE_FROM_ALL,参数的意思是这个不会被默认构建,除非有其他的组件依赖或者手工构建。 根据ADD_LIBRARY指令的描述,在上面的例子中,很清楚的理解是生成静态的操作。...那么将上面的ADD_LIBRARY(rice STATIC {LIBRICE_SRC})替换成ADD_LIBRARY(rice SHARED {LIBRICE_SRC})编译生成的就是动态

1.6K20

静态动态的思考

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

1.5K60

动态静态小看法

动态静态对比一览表 动态 静态 文件名 windows: *.dlllinux: *.somacos*.dylib windows: *.liblinux: *.amacos *.a或*....framework 可执行文件体积 较小 较大 内存使用 较小 较大 执行速度 较慢 较快 一些个人看法 动态虽然可以不用打包到安装包中,而依赖系统中的动态,似乎是一种不错的方案,缩小安装包的大小...但事实上大多数Qt程序都会带上动态一起打包。这样一来反而比静态链接的程序更大。因为程序链接静态时只会链接程序用到的代码。 修改了动态代码,如果没有及时更新则会导致程序可能无法运行。...使用某些开源协议的代码生成的静态链接在程序中可能存在违反开源协议如(GPL,LGPL等)。

54910

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

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

4.7K20

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

动态静态优缺点比较 (2012-10-18 15:31) 我们在编写一个C语言程序的时候,经常会遇到好多重复或常用的部分,如果每次都重新编写固然是可以的,不过那样会大大降低工作效率,并且影响代码的可读性...以linux下的静态动态为例我们研究一下,首先我们看一下他们的生成方式 静态: 首先将源文件编译成目标文件:gcc –c a.c b.c 生成静态:ar –rc libstatic.a a.o...总结: 一、的类型 (一) 在windows中 .dll 动态 .lib 静态 即为源代码的二进制文件 (二) 在linux中 .so 动态 .a 静态 (三) 静态动态的优缺点...由于windows和linux的本质不同,因此二者的二进制是不兼容的。 本文仅限于介绍linux下的 2.的种类 linux下的有两种:静态和共享动态)。...中编译静态(.a)和动态(.so)的基本方法 (四) 静态linux环境中, 使用ar命令创建静态文件.如下是命令的选项: d —–从指定的静态文件中删除文件

3.1K20

iOS开发之动态静态

是一份可执行代码的二进制代码,可以被操作系统载入内存,并且被识别、使用。 在链接阶段,会将汇编生成的目标文件引用的一起链接,打包进可执行文件中。...混合使用 静态可以依赖静态动态可以依赖动态动态不能依赖静态。原因是静态不需要在运行时再次加载, 如果多个动态依赖同一个静态, 则会出现多个静态的拷贝。...开发者也可以制作的动态framework,但会受到平台限制,需要通过Embedded Framework的方式进行工作,系统动态不同,这种动态最终也要拷贝到 App 中。...对于用户动态,需要将Embed属性设置成Embed。 对于静态,需要将Embed属性设置成Do Not Embed。...参考 Xcode 15 优化 iOS整理: 关于动态静态

63930

C++基础 静态动态

静态链接(*.lib) 如果在程序中使用静态链接,那么链接器在链接的过程中会将.obj文件和.lib文件组织成可执行exe文件,也就是将.lib中的代码链接到可执行文件中,因此生成的exe文件比较大...这是静态链接的一个弊端。 但程序在发行时不需要提供文件。...静态优点总结 代码装载速度快,执行速度略比动态链接快 程序在发行时不需要提供文件,不存在兼容性问题 静态缺点总结 使用静态链接生成的可执行文件体积较大,包含相同的公共代码,造成浪费 程序可扩展性差...注意该.lib静态链接的.lib文件不同,静态链接的.lib中包含了所需函数的代码,动态链接的.lib仅指示函数在dll文件中的入口。...动态优点总结 更加节省内存并减少页面交换 dll文件exe文件独立,只要输出接口不变(即名称、参数、返回值类型和调用约定不变),更换dll文件不会对exe文件造成任何影响,因而极大地提高了可维护性和可扩展性

1.3K10

静态动态的那些事

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

1.5K00
领券