静态库与动态库的区别以及优缺点,在linux环境下配置静态库与动态库

来源:互联网 发布:知乎 性观念 编辑:程序博客网 时间:2024/05/01 20:19

注意我们这里主要讨论在linux环境下的区别


我们大家都知道函数的库分为两种一个是静态库另一个是动态库


库文件:

                   静态库                                             共享库(动态库)

                   半成品                                              零件半成品

Linux         .a                                                        .so

Windows   .lib                                                       .dll/.DLL

使用时机    链接过程                                             运行过程(将动态库加载到磁盘中单独执行)

链接过程    将库里的东西打包到了库文件,一旦生产静态库可以没有

他们两的主要区别是在使用的时机不同:                                     

                                            

在动态库只是链接了地址一个符号,                                          静态库在链接是就进行了打包。

链接的过程再去寻找单独去加载内存中。


.o也是二进制文件的集合,相当于一个包是静态中生成的编译文件,只是查看了语法什么的错误是.c的中间文件

动态库是通过gcc生成不可单独执行的可执行文件,如果其它文件调用可以单独执行


静态库的优缺点:

优点:他编译后执行不需要外部的函数库支持,因为所有的函数都已经被编译进去了。

缺点:如果库函数改变,那就得重新编译。

动态库的优缺点:

优点:动态函数库所产生的可执行文件比较小,动态库的改变不会影响到你的程序,所以在升级会比较方便。

缺点:因为库函数没有整合进你的程序,而是程序运行时动态的申请调用,所以程序的运行环境中必须提供相应的库。


下来我们一起看看如何配置静态库与动态库

生成静态库:

gcc -c   *.c --> *.o

ar crv libxxx.a *.o-->libxxx.a

gcc -o main main.c -L(path) -lxxx  xxx是名称 path是路径

取绝对路径用=$(pwd)


生成动态库:

gcc -shared -fPIC -o libxxx.so *.c 除了main.c

gcc -o main main.c -L. -lxxx

修改环境变量LD_LIBRARY_PATH: export LD_LIBRARY_PATH=最好是绝对路径

2.将生成的动态库拷贝到默认加载路径下: /lib  /user/lib





原创粉丝点击