浅析静态库和动态库的区别及linux下二者的生成和使用

从编程的角度来讲,库文件通常被分为静态库文件和动态库文件,其目的在于将部分代码封装在一起编译后供自己或他人调用,好处在于编译后的库文件看不到源代码,可保密,同时不会因为不小心修改了函数而出问题,便于维护。但是二者之间存在一定的差异。
    1.静态库:
    静态库在Windows操作系统中是.lib文件,在Linux下是.a文件,相当于中间(.o)文件的集合,是在程序链接时使用,讲静态库中的文件直接合成到最后的可执行文件中去,程序运行时,则不再需要静态库的支持。在linux下静态库的生成及使用方法如下:
    (1)将所有的源文件编译生成中间文件命令如下:
     gcc -c *.c
    (2)生成libxxx.a文件(这里的lib是必须有的,与后面的自定义的一起构成库文件名称)命令如下:
     ar crv libxxx.a *.o
    (3)静态库的使用
     gcc -o main main.c -L路径 -l库名(这里的main.c是自己的代码名称)
    2.动态库(共享库)
    动态库在Windows操作系统中是.dll文件,在Linux操作系统下是.so文件,动态库的使用是在使用动态库的程序运行起来后,动态地将动态库加载到内存上去执行,可以总结为不可执行的可执行文件。在Linux下动态库的生成及使用方法如下:
    (1)生成libxxx.so文件(这里的lib是必须有的,与后面的自定义的一起构成库文件名称)命令如下:
     gcc -shared -fPIC -o libxx.so *.c
    (2)动态库的使用
     gcc -o main main.c -L路径 -l库名(这里的main.c是自己的代码名称)
    (3)使用动态库的程序在运行时,需要单独搜索并加载动态库文件,做法如下:
     a.将动态库拷贝到/lib或者/usr/lib任意一个路径下
     b.设置环境变量
     c.修改配置文件
     区分静态库和动态库除了以上说的几点外,还有一点可以很快区分。静态库删除后程序无法使用,而动态库删除之后程序照样可以正常运行。  

猜你喜欢

转载自blog.csdn.net/pretysunshine/article/details/81385818
今日推荐