静态库和动态库的区别和使用


    静态库在编译链接是就把库里头的代码提取出来放到可执行文件中,程序的执行不在依赖库。
    动态库在编译链接时只记录要用的名字在哪个库文件中,运行时才从库文件中查找这个名字(函数或着变量)并访问它。
    之间的区别:生成可执行文件大小、可执行文件执行速度、库生效方式
(1)静态库 libxxx.a
     1)生成静态库
       写的C语言程序不应该有main函数
       gcc -c  xxx1.c
       gcc -c  xxx2.c
       写的头函数xxx.h中存放函数的声明和全局变量的声明(extent int a之类的)
       ar -r libxxx.a xxx1.o  xxx2.o
     2)使用库
       写C语言程序usexxx.c,包含xxx.h头文件,那么在程序中可以调用库中的函数或者全局变量。
       方法一:gcc -c usexxx.c; gcc usexxx.o libxxx.a 
       方法二:gcc -c usexxx.c; gcc usexxx.o lxxx -L. (其中lxxx表示lib库libxxx.a文件,xxx表示库名;-L.表示当前的目录下查找库文件libxxx.a)
       方法三:先设置全局环境变量LIBRARY_PATH为库文件所在的目录,然后gcc -c usexxx.c; gcc usexxx.o lxxx
     3)查看静态库
        ar -t libxxx.a   //查看静态库中链接的文件
        nm libxxx.a  //查看静态库中链接文集及其中的函数
(2)动态库 libxxx.so
     1)生成动态库
        写的C语言程序不应该有main函数
        gcc -c -fpic xxx1.c xxx2.c;
        gcc -shared -o libxxx.so xxx1.o xxx2.o;
        
     2)使用动态库
        编译时:
            写C语言程序usexxx.c
            方式一:gcc -c usexxx.c; gcc usexxx.o lxxx -L. 
            方式二:先设置全局环境变量LIBRARY_PATH为库文件所在的目录,然后gcc -c usexxx.c; gcc usexxx.o lxxx 
        运行时:
            方式一:把库文件放在系统标准库目录,/urs/lib或/lib目录中,就可以运行可执行文件了。
            方法二:gcc -c usexxx.c; gcc usexxx.o lxxx -L. (其中lxxx表示lib库libxxx.a文件,xxx表示库名;-L.表示当前的目录下查找库文件libxxx.a)
            方式三:先设置全局环境变量LD_LIBRARY_PATH为动态库文件所在的目录,然后运行可执行文件。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值