其他分享
首页 > 其他分享> > 动态库、静态库和链接

动态库、静态库和链接

作者:互联网

目录

静态库

动态库

库相关的命令

静态库和动态库区别

使用

动静态库优缺点


静态库

静态库在编译的时候会被直接拷贝一份,复制到目标程序里,这段代码在目标程序里就不会再改变了。
生成静态库命令:gcc -shared -o func.a func.o  //或 ar cr func.a func.o

动态库

动态库在编译时并不会被拷贝到目标程序中,目标程序中只会存储指向动态库的引用。等到程序运行时,动态库才会被真正加载进来。
编译:需要指定-l选项,链接相应的库;如果要在运行时搜索自己的库文件路径,要用-Wl,rpath选项来指定。
生成动态库命令:gcc -shared -fPIC libfunc.so func.o
例如:有libfunc.so
gcc -o test -L./ -lfunc -Wl,rpath=./
运行时,要将libfunc.so放到test同路径下。(因为-Wl,rpath指定了当前路径)

a.编译目标代码时指定的动态库搜索路径;(-L选项指定)
b.环境变量LD_LIBRARY_PATH指定的动态库搜索路径;
c.配置文件/etc/ld.so.conf中指定的动态库搜索路径;(修改完文件后,用ldconfig更新)
d.默认的动态库搜索路径/lib和/usr/lib;

库相关的命令

ld        是gcc的链接程序。
ldd       是查看可执行文件中所依赖的库的程序,比如想查main程序用到了那些动态库,可以直接ldd main
ldconfig  用来更新文件/etc/ld.so.conf的修改生效。
nm        用来查看.so库中的函数名字,标记是T的就是动态库里面生成的名字。如:nm /lib/libc*.so

静态库和动态库区别

使用

静态库只在编译时指定库即可,动态库在编译和运行时都需要库。

动静态库优缺点

静态库优点:
1.运行时不需要库文件
2.直接存在于最终文件,运行速度稍微快一点。
    动态库:可执行文件只包含需要的库的函数的引用表,只有在程序执行时,需要的函数代码才会拷贝到内存中。
    运行时要去链接库会花费一定的时间,执行速度相对会慢一些。
3.牺牲空间换时间

动态库优点:
1.目标程序小
2.运行时才载入的特性,让我们可以随时对库进行替换,而不需要重新编译代码
3.操作系统使用虚拟内存,使得一份共享库驻留在内存中被多个程序使用,也同时节约了内存
4.牺牲时间换空间

标签:静态,目标程序,编译,so,func,动态,链接
来源: https://blog.csdn.net/feiying0canglang/article/details/99843545