Linux学习——动态链接库和静态链接库

静态链接库:

用户在生成可执行文件时,调用的以.a结尾的库文件

动态链接库:

用户在生成可执行文件时,调用的以.so/.so.1.xxx结尾的库文件

静态库文件在编译时,会编译到可执行文件里面,所以在运行的时候,可以不依赖于静态库文件,造成生成的可执行文件过大。

静态库在编译时,不会包含到可执行文件中,通常在运行时,需要将对应的动态库文件一起拷贝,才能正常执行,但是可执行文件一般比较小。

.la 为libtool生成的共享库,其实是个配置文档。可以用file或者vim查看。

.ko 文件是Linux内核使用的动态链接文件后缀,属于模块文件,用在Linux系统启动时加载内核模块。

创建和生成库文件

1、gcc -c test.c                    生成.o的对象文件

2、ar -r libtest.a test1.o test2.o           生成libtest.a的静态库文件

3、gcc -Wall -fpic -shared test1.c test2.c -o libtest.so  生成动态库文件

4、.la库一般通过makefile生成。

gcc test.c -o test -I/usr/local/include -L/usr/local/lib -la -lb -lc

gcc test.c -o test -I/usr/local/include /usr/local/lib/liba.a /home/usr/local/lib/libb.a /home/usr/local/libc.a

./configure CFLAGS="-I/usr/local/include" LDFLAGS="-L/usr/local/lib"    等效于 export CFLAGS=“$CFLAGS:/usr/local/include”;LDFLAGS="$LDFLAGS:/usr/local/lib"

多个静态文件链接成一个静态文件:

.a 文件的结构和.tar文件就没有什么区别。 x 命令解出来, a 命令添加, t命令列表
假设A.a, B.a C.a 在/usr/local/lib目录下
mkdir /tmp/libABC
cd /tmp/libABC
ar x /usr/local/lib/A.a
ar x /usr/local/lib/B.a
ar x /usr/local/lib/C.a
ar cru libABC.a *.o
ranlib libABC.a

时间: 2024-10-01 04:59:26

Linux学习——动态链接库和静态链接库的相关文章

Linux下动态链接库和静态链接库问题

第一部分:编译过程 先了解一下linux下C代码的编译过程,C代码的编译,一般分成四个阶段,包括:预编译,编译,汇编和链接,这四个阶段的分工是 预编译阶段: 编译阶段: 汇编阶段: 链接阶段: 第二部分:动态链接库和静态链接库的定义 第三部分:动态链接库和静态链接库的区别 第四部分:动态链接库和静态链接库的使用办法

C++中的动态链接库和静态链接库

转自 作者:吴秦出处:http://www.cnblogs.com/skynet/ 这次分享的宗旨是--让大家学会创建与使用静态库.动态库,知道静态库与动态库的区别,知道使用的时候如何选择.这里不深入介绍静态库.动态库的底层格式,内存布局等,有兴趣的同学,推荐一本书<程序员的自我修养--链接.装载与库>. 什么是库 库是写好的现有的,成熟的,可以复用的代码.现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常. 本质上来说库是一种可执行代码的二进制形式

[转载]GCC 编译使用动态链接库和静态链接库--及先后顺序----及环境变量设置总结

来自http://blog.csdn.net/benpaobagzb/article/details/51364005 GCC 编译使用动态链接库和静态链接库 1 库的分类 根据链接时期的不同,库又有静态库和动态库之分. 静态库是在链接阶段被链接的(好像是废话,但事实就是这样),所以生成的可执行文件就不受库的影响了,即使库被删除了,程序依然可以成功运行. 有别于静态库,动态库的链接是在程序执行的时候被链接的.所以,即使程序编译完,库仍须保留在系统上,以供程序运行时调用.(TODO:链接动态库时链

GCC 编译使用动态链接库和静态链接库--及先后顺序----及环境变量设置总结

GCC 编译使用动态链接库和静态链接库 1 库的分类 根据链接时期的不同,库又有静态库和动态库之分. 静态库是在链接阶段被链接的(好像是废话,但事实就是这样),所以生成的可执行文件就不受库的影响了,即使库被删除了,程序依然可以成功运行. 有别于静态库,动态库的链接是在程序执行的时候被链接的.所以,即使程序编译完,库仍须保留在系统上,以供程序运行时调用.(TODO:链接动态库时链接阶段到底做了什么) 2 静态库和动态库的比较 链接静态库其实从某种意义上来说也是一种粘贴复制,只不过它操作的对象是目标

Qt 共享库(动态链接库)和静态链接库的创建及调用

前言: 编译器 Qt Creator, 系统环境 win7 64 位 1.创建共享库: 新建文件或项目->选择 Library 和 c++ 库->选择共享库->下一步(工程名为 sharedlib) 生成的目录结构如图: 修改 sharedlib.h 中的代码: // sharedlib.h #ifndef SHAREDLIB_H #define SHAREDLIB_H #include "sharedlib_global.h" class SHAREDLIBSHAR

linux下的动态链接库和静态链接库到底是个什么鬼?(二)动态链接库的编译与使用

上一篇文章里讲解了linux下静态链接库的编译与使用,下面我们来聊聊动态链接库的编译与使用方法. 所谓动态链接库,也就是说编译的时候不会真的把你引用到的库给编到你的执行程序里,而是在执行时候才会去加载相关的库,所有用到此库的程序可以共享一份代码,这样带来的好处是可执行程序所占的空间变小了,同时,如果库需要升级,你并不需要重新编译你的程序,只要把相关的库升级即可. 接下来我们来看看动态链接库的编译与使用方法,代码还是和上文中的一样,分别为?sum.c, sum.h, 和main.c, 在linux

GCC 编译使用动态链接库和静态链接库

1 库的分类 根据链接时期的不同,库又有静态库和动态库之分. 静态库是在链接阶段被链接的(好像是废话,但事实就是这样),所以生成的可执行文件就不受库的影响了,即使库被删除了,程序依然可以成功运行. 有别于静态库,动态库的链接是在程序执行的时候被链接的.所以,即使程序编译完,库仍须保留在系统上,以供程序运行时调用.(TODO:链接动态库时链接阶段到底做了什么) 2 静态库和动态库的比较 链接静态库其实从某种意义上来说也是一种粘贴复制,只不过它操作的对象是目标代码而不是源码而已.因为静态库被链接后库

C++ 动态链接库和静态链接库

概论 先来阐述一下DLL(Dynamic Linkable Library)的概念,你可以简单的把DLL看成一种仓库,它提供给你一些可以直接拿来用的变量.函数或类.在仓库的发展史上经历了"无库-静态链接库-动态链接库"的时代. 静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib中的指令都被直接包含在最终生成的EXE文件中了.但是若使用DLL,该DLL不必被包含在最终EXE文件中,EXE文件执行时可以"动态"地引用和卸载这个与EXE

动态链接库与静态链接库

动态链接库 概念 动态库(Dynamic Link Library abbr,DLL)技术是程序设计中经常采用的技术.其目的减少程序的大小,节省空间,提高效 率,具有很高的灵活性.采用动态库技术对于升级软件版本更加容易.与静态库(Static Link Library)不同,动态库里面的函数不是执行程序本身的一部分,而是根据执行需要按需载入,其执行代码可以同时在多个程序中共享. 在Linux下,动态链接库以.so的后缀存在!在Windows下,动态链接库以.dll的后缀存在! 优点 动态链接库不