Linux下的库


库,无论在什么平台下,都只有两种,一种是:

  • 动态库,可以多个共享
  • 静态库,直接编译到软件之中

这种形式,无论在哪里,都不会发生改变!但是,可以会因为平台的不同,而有所不同,例如:

在windwos下是:.lib文件和.dll文件

在Linux下是:.a文件和.so文件

在Mac下是归档文件[我还没了解清楚]

所以,使用平台的不同,有些是不同,但是,原理是一样的,我们只有学会了原理,才可以举一反三,在不同的平台上进行合理的操作和流利的过度

静态库和动态库都各有优缺点,这些优缺点要学会合理利用,而且,每一种方式都要会,这样的话,我们就可以根据实际情况来进行裁剪,对软件进行最合适的配置了

我简单举几个例子:

动态库,可以多个软件共享,而且只有一份,如果,有许多的软件都要共享,那么,这是一种好的方式,比如,百度的地图,就提供了一个so文件,这样的话,所有的机器都可以用,可以不用重新编译

静态库,可以直接编译到软件中,不用拖泥带水,一个软件挂一大堆的动态包,这是一种不友好的行为的,而且,有的软件动态包超级大,而,你又是只用到其中一个小小的功能,这无疑,是一种糟糕的做法!但是,有时候,你也会发现直接编译进软件,会有其他的不好的地方,比如:这个单一的软件,超级大!而且是一个超级大!编译也很浪费时间!

一句话说清楚:大型项目用动态库,小型软件直接静态编译

根据UNIX哲学:不要去创造大的东西,尽量保持简洁,我们一直都是建议,尽可能的小,做到无敌小超人那样!

时间: 2024-12-29 10:06:45

Linux下的库的相关文章

谈谈Linux下动态库查找路径的问题 ldconfig LD_LIBRARY_PATH PKG_CONFIG_PATH

谈谈Linux下动态库查找路径的问题 ldconfig LD_LIBRARY_PATH  PKG_CONFIG_PATH 转载自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=23069658&id=4028681 学习到了一个阶段之后,就需要不断的总结.沉淀.清零,然后才能继续“上路”.回想起自己当年刚接触Linux时,不管是用源码包编译程序,还是程序运行时出现的和动态库的各种恩恩怨怨,心里那真叫一个难受.那时候脑袋里曾经

Linux下的库操作工具-nm、ar、ldd、ldconfig和ld.so

Linux下的库操作工具-nm.ar.ldd.ldconfig和ld.so 1.nm [options] file 列出file中的所有符号 [option] -c 将符号转化为用户级的名字 -s 当用于.a文件即静态库时,输出把符号名映射到定义该符号的模块或成员名的索引 -u 显示在file外定义的符号或没有定义的符号 -l 显示每个符号的行号,或为定义符号的重定义项 2.ar {dmpqrtx} [member] archive file 用于操作高度结构化的存档文件(.a) [option

linux下的库链接

linux下的编译一般都是需要一些头文件或者库文件的支持,头文件或者库文件一般的默认路径是在/usr/include/ 和/usr/lib/下的,但是当你需要的文件没有在默认的路径下,该怎么办尼,这里提供了几种链接到的方法: 1.$ gcc foo.c -I /home/liuru/include -o foo                                               链接到/home/liuru/include 下的头文件,使用-I选项 2.$ gcc foo

linux下动态库的编写和调用

linux下动态库的编写和调用 linux下编写和调用一个简单的动态库大概分为以下几个步骤: - 创建动态库程序文件 add.c int add(int a,int b) { return a+b; } 创建引用头文件 head.c #ifndef _HEAD_ #define _HEAD_ int add(int a,int b); #endif 生成目标文件 生成要加编译器选项 -fpic gcc -fpic -c add.c 然后生成动态库 注意使用链接器选项 -shared gcc -s

Linux下静态库与动态库

一.基本概念 1.1.什么是库        在 windows 平台和 linux 平台下都大量存在着库. 本质上来说库是一种可执行的二进制代码(但不可以独立执行),可以被操作系统载入内存执行. 由于 windows 和 linux 的平台不同(主要是编译器.汇编器和连接器 的不同),因此二者库的二进制是不兼容的. 本文仅限于介绍 linux 下的库. 1.2. 库的种类 linux下的库有两种:静态库和共享库(动态库). 二者的不同点在于代码被载入的时刻不同: 静态库的代码在编译过程中已经被

linux下静态库和动态库一些东西

http://www.cnblogs.com/changefuture/archive/2011/12/22/2297460.html Linux  动态链接库和静态库示例 文件预览 文件目录树如下,如你所见,非常简单. libtest/ |-- lt.c |-- lt.h `-- test.c 代码 #lt.c /* lt.c * */ #include <stdio.h> void myprint(void) { printf("Linux library test!\n&quo

Linux下动态库生成和使用

Linux下动态库生成和使用 一.动态库的基本概念 1.动态链接库是程序运行时加载的库,当动态链接库正确安装后,所有的程序都可以使用动态库来运行程序.动态链接库是目标文件的集合,目标文件在动态链接库中的组织方式是按照特殊方式形成的.库中函数和变量的地址是相对地址,不是绝对地址,其真实地址在调用动态库的程序加载时形成. 2.动态链接库的名称有别名(soname), 真名(realname)和链接名(linker name).别名由一个前缀lib,然后是库的名字,再加上一个后缀“.so”构成.真名是

Linux下静态库和动态库的制作与使用

p.MsoNormal,li.MsoNormal,div.MsoNormal { margin: 0cm; margin-bottom: .0001pt; text-align: justify; font-size: 10.5pt; font-family: "Times New Roman", serif } h2 { margin-top: 14.0pt; margin-right: 0cm; margin-bottom: 14.0pt; margin-left: 28.8pt;

Linux下静态库生成和使用

Linux下静态库生成和使用 一.静态库概念 1.库是预编译的目标文件(object  files)的集合,它们可以被链接进程序.静态库以后缀为”.a”的特殊的存档(archive file)存储. 2.标准系统库可在目录/usr/lib与/lib中找到.比如,在类Unix系统中C语言的数序库一般存储为文件/usr/lib/libm.a.该库中函数的原型声明在头文件/usr/include/math.h中. 3.C标准库本身存储为/usr/lib/libc.a,它包含ANS1/ISO标准指定的函

Linux下动态库的使用

[简介] linux环境下的动态库一般名为libxxx.so, 用ldd命令分析某个可执行程序,可以看到该程序依赖哪些动态库,以及路径. 如 ldd ./test linux-vdso.so.1 =>  (0x00007fffaab52000) libc.so.6 => /lib64/libc.so.6 (0x0000003c4c800000) /lib64/ld-linux-x86-64.so.2 (0x0000003c4c000000) 如果有依赖库找不到,程序会无法正常运行. [创建一个