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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 









以上是关于Linux学习——动态链接库和静态链接库的主要内容,如果未能解决你的问题,请参考以下文章

Linux 静态链接库和动态连接库

Linux 静态链接库和动态连接库

Linux下的静态链接库和动态链接库

Linux动态链接和静态链接简析

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

动态链接库和静态链接库的区别