静态库和动态库的分析

本质上来说库是一种可执行代码的二进制形式。

linux下的库有两种:静态库和共享库(动态库)

静态库在程序编译时会被连接到目标代码中:程序运行时将不再需要该静态库,因此体积较大。

优点:程序运行时将不再需要该静态库

缺点:可执行文件的体积较大。

相同的库可能会需要被多次加载。

静态库: libxxxxx.a

动态库:动态库在程序编译时并不会被连接到目标代码中,

优点: 在程序运行时动态库才会被载入内存,因此代码体积较小。

缺点: 因此在程序运行时还需要动态库存在。

静态库的制作:将功能函数编译成库。

1、先生成目标文件

gcc -c -Wall fun.c -o fun.o

2、ar crs  libfun.a  fun.o

将fun.o文件 打包生成libfun.a的静态库

库的命名:lib库名.a

使用:

-L:指定库的路径

-l :指定需要连接的库的名字

gcc test.c -o test -L .  -lfun

动态库的制作和使用:

1、需要生成目录文件

gcc -c -fPIC -Wall  fun.c -o fun.o

fPIC:说明库可以被加载到内存的任意位置

2、gcc -Wl,-soname,libfun.so  -shared fun.o -o libfun.so.1

-Wl,-soname,libfun.so  需要连接的库

libfun.so.1  实际生成的库。

库的命名:lib库名.so

3、 ln -s   绝对路径/libfun.so.1    libfun.so

4、gcc test.c -o test -L . -lfun

共享库的加载方法:

1、动态库需要被放置到/usr/lib  或者  /lib目录下。

只需要将软连接移动过去。

2、将库的路径添加到系统环境变量中

LD_LIBRARY_PATH

exprot  LD_LIBRARY_PATH=库的路径

3、将库的路径添加到  /etc/ld.so.conf/xxx.conf 的配置文件中

sudo  ldconfig  来重启配置文件

时间: 2024-10-28 19:48:06

静态库和动态库的分析的相关文章

关于Linux静态库和动态库的分析

关于Linux静态库和动态库的分析 关于Linux静态库和动态库的分析 1.什么是库 在windows平台和linux平台下都大量存在着库. 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行. 由于windows和linux的本质不同,因此二者库的二进制是不兼容的. 本文仅限于介绍linux下的库. 2.库的种类 linux下的库有两种:静态库和共享库(动态库). 二者的不同点在于代码被载入的时刻不同. 静态库的代码在编译过程中已经被载入可执行程序,因此体积较大. 共享库的代

运行时库以及静态库,动态库之间的关系

了解篇 http://www.cnblogs.com/renyuan/p/5031100.html 知道MT,MD之间的不同,MT会将LIBC.LIB或者LIBCMT.LIB打包进可执行程序, 而MD则告诉可执行程序,运行的时候调用msvcrt.dll,因此任何一个工程 只能选择运行时库中的一种方式,MD,MDd,MT,MTd,这四种方式的一种, 连接C库,不管是一个静态库,还是一个动态库,还是一个可执行程序, 链接的其他库的时候,都必须保持一致,否则就会出现如下的提示: 错误 LNK2038

静态库与动态库的制作

1.相关知识 (1).不管是制作静态库还是动态库,都得对.o文件进行打包: (2).在/lib64目录下,静态库文件.a,动态库文件.so 2.静态库 (1).gcc -c add.c    ------> 生成add.o文件,其中通过参数(-c): (2).静态库由命令ar创建:  ar  -cr  add.a  add.o   (3).静态库的编译有两种方法:   a:gcc test.c -o test -L. add.a     //每次都得在编译时加上-L. 静态库文件: b.将.a文

静态库和动态库编程技术

(1)库 一.什么是库 库从本质上来说是一种代码重用的方式,即预先编译可执行代码的二进制格式, 可以被载入内存中,执行,比如C运行库,里面实现了基本的函数,我们无需在写一遍,直接调用接口即可. 库分为静态库和动态库两种, 二.静态库和动态库区别 1.静态函数库 这类库名字一般是xxx.lib,利用静态编译的文件比较大,因为这个函数库的所有数据 都会被整合进目标代码中 优点: 即编译后执行程序不需要外部的函数库支持,因为所有使用的函数都被编译进去了, 缺点: 如果静态函数库里的东西改变了,那你的程

face++静态库转为动态库

前言 苹果商店上架应用,有规定支持iOS8.0以上的iPA可执行文件的大小不能超过60M. face++提供过来的是静态库,会导致苹果上架的ipa的包增加1.5M左右.而刚好我们的APP包Mach-O文件大小接近60M,因而,最好的方式是通过动态库的方式来接入. Face++文件: https://faceid.com/pages/documents/37661898 SDK需要问Face++的人拿,Demo跑起来是需要key和secret的 静态库转动态库 静态库转动态库,有两种转换方式,一是

详解UE4静态库与动态库的导入与使用

转自:https://blog.csdn.net/u012999985/article/details/71554628 一.基本内容概述 最近做项目时经常看到build.cs文件,就想研究一下UE4中第三方库的使用.通过网络以及wiki确实获取到不少有用的信息,但是没有一篇文章,让我看完就立刻明白的.所以,我在这里详细的描述dll与lib在UE4中的使用,同时简单描述一些基本原理,解决网上的一些文章由于描述不清而造成的误导. UE4本身有很多功能使用的是第三方的库,如物理physX,模型优化S

iOS 中的静态库与动态库,区别、制作和使用

如果我们有些功能要给别人用,但是又不想公开代码实现,比如高德地图.第三方登录分享等等,这时候我们就要打包成库了.库分静态库和动态库两种: 静态库:以.a 和 .framework为文件后缀名.动态库:以.tbd(之前叫.dylib) 和 .framework 为文件后缀名. 静态库与动态库的区别 静态库:链接时会被完整的复制到可执行文件中,被多次使用就有多份拷贝.动态库:链接时不复制,程序运行时由系统动态加载到内存,系统只加载一次,多个程序共用(如系统的UIKit.framework等),节省内

linux上静态库和动态库的编译和使用(附外部符号错误浅谈)

主要参考博客gcc创建和使用静态库和动态库 对于熟悉windows的同学,linux上的静态库.a相当于win的.lib,动态库.so相当于win的.dll. 首先简要地解释下这两种函数库的区别,参考<Linux程序设计> 1. 静态库也被称为归档文件(archive,因此创建命令是ar),编译器和链接器负责将程序代码和静态库结合在一起组成单独的可执行文件: 但是缺点是许多应用程序同时运行并使用来自同一个静态库的函数时,内存中就会有一个函数的多份副本,而且程序文件自身也有多份同样的副本,这将消

Linux使用静态库和动态库

Linux使用静态库和动态库 (一)库的概念 库是可以复用的代码,在一些大的项目中常常会用到库. 本质上说:库是一种可执行代码的二进制形式,可以被操作系统载入内存执行. 一般说库是说两种: 静态库:linux下.a文件.windows下.lib文件 动态库:linux下.so文件.windows下.dll文件 最近花了一些时间把linux下编译.链接等研究了一下,作为一个菜鸟记录并分享一蛤. (二)静态库与动态库 程序的编译运行要经过以下步骤: 1.源文件(.h .cpp等) 2.预编译 3.编