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