静态库和共享库-Linux/Unix

1 静态库
          静态库就是目标文件的集合,以.a结尾。静态库在程序链接的时候使用,链接器会将程序中使用到的函数的代码从
  库文件中拷贝到应用程序中去(a.out)。一旦链接完成,那么在执行程序时就不需要该静态库了。由于每个使用静
  态库的应用程序(a.out)都需要拷贝所用函数的代码,所以静态链接的文件会比较大。
  1.1 静态库的创建
       1)编辑.c和.h文件
       2)编译生产目标文件:gcc -c xxx.c -o xxx.o
                                             gcc -c yyy.c -o yyy.o
                                              ...
       3)打包成静态库文件:ar -r libxxxxxxxxx.a xxx.o yyy.o
                                              -r:将目标文件插入到静态库中,已存在则更新
  1.2 静态库的使用
      1)直接法
                        gcc xxx.c libxxxxx.a
      2)环境变量法
                        export LIBRARY_PATH=.:$LIBRARY_PATH
                        (声明定义) 环境变量的名称=.:原有值(取原有值只要在变量的前面加一个$符号)
                        gcc xxx.c -lxxxxx
      3)参数法
                        gcc main.c -lmy -L./
 
2 共享库
          共享库在程序链接时,并不像静态库那样拷贝使用函数的代码,而只是做一些标记,然后在程序启动的时,动态加载所
  需要的共享库。所以当应用程序运行时,任然需要共享库的支持。共享库链接出来的a.out要比静态库链接出来的a.out
  要小。
  2.1 共享库的创建
     1)编辑.c .h
     2)编译生成目标文件 gcc -c -fpic xxx.c -o xxx.o
                                        gcc -c -fpic yyy.c -o yyy.o
                                         ......
     3)链接生产共享库文件 gcc -shared xxx.o yyy.o -o libxxxx.so
                                            gcc -shared -fpic xxx.c yyy.c -o libxxxx.so
  2.2使用共享库
     1)直接法
                      gcc xxx.c libxxxxx.so
     2)环境变量法
                      export LIBRARY_PATH=.:$LIBRARY_PATH
                      (声明定义) 环境变量的名称=.:原有值(取原有值只要在变量的前面加一个$符号)
                      gcc xxx.c -lxxxxx
     3)参数法(推荐)
                      gcc main.c -lmy -L./
  2.3 运行
                      export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH
                      LD_LIBRARY_PATH:指定共享库加载目录

  【总结】静态库占用的空间大,不易修改,但执行效率高
                共享库占用的空间小,易于修改,但执行效率低
  
    需要使用的命令:
        ar:打包
        nm:可以查看目标文件(.o)、可执行文件(a.out)、静态库文件(.a)、共享库文件(.so),他们中的所有的符号
        ldd:可以用来查看可执行文件(a.out)和共享库文件(.so)的动态依赖
        objdump:显示二进制模块的汇编信息(查看代码的执行效率)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ERROR: Bitbake Fetcher Error: FetchError('Fetch command export PSEUDO_DISABLED=1; export DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/1000/bus,guid=d96498d849b66a7ed5ae1643647dc969"; export SSH_AGENT_PID="1854"; export SSH_AUTH_SOCK="/run/user/1000/keyring/ssh"; export PATH="/home/wu/3568/yocto/poky/scripts/native-intercept:/home/wu/3568/yocto/build/tmp/sysroots-uninative/x86_64-linux/usr/bin:/home/wu/3568/yocto/build/tmp/work/x86_64-linux/bmap-tools-native/3.6+gitAUTOINC+c0673962a8-r0/recipe-sysroot-native/usr/bin/python3-native:/home/wu/3568/yocto/poky/scripts:/home/wu/3568/yocto/build/tmp/work/x86_64-linux/bmap-tools-native/3.6+gitAUTOINC+c0673962a8-r0/recipe-sysroot-native/usr/bin/x86_64-linux:/home/wu/3568/yocto/build/tmp/work/x86_64-linux/bmap-tools-native/3.6+gitAUTOINC+c0673962a8-r0/recipe-sysroot-native/usr/bin:/home/wu/3568/yocto/build/tmp/work/x86_64-linux/bmap-tools-native/3.6+gitAUTOINC+c0673962a8-r0/recipe-sysroot-native/usr/sbin:/home/wu/3568/yocto/build/tmp/work/x86_64-linux/bmap-tools-native/3.6+gitAUTOINC+c0673962a8-r0/recipe-sysroot-native/usr/bin:/home/wu/3568/yocto/build/tmp/work/x86_64-linux/bmap-tools-native/3.6+gitAUTOINC+c0673962a8-r0/recipe-sysroot-native/sbin:/home/wu/3568/yocto/build/tmp/work/x86_64-linux/bmap-tools-native/3.6+gitAUTOINC+c0673962a8-r0/recipe-sysroot-native/bin:/home/wu/3568/yocto/poky/bitbake/bin:/home/wu/3568/yocto/build/tmp/hosttools"; export HOME="/home/wu"; git -c core.fsyncobjectfiles=0 -c gc.autoDetach=false -c core.pager=cat clone -n -s /home/wu/3568/yocto/build/../packages/git2/github.com.intel.bmap-tools/ /home/wu/3568/yocto/build/tmp/work/x86_64-linux/bmap-tools-native/3.6+gitAUTOINC+c0673962a8-r0/git/ failed with exit code 128, output:\nfatal: repository \'/home/wu/3568/yocto/build/../packages/git2/github.com.intel.bmap-tools/\' does not exist\n', None)具体如何修改
06-08

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值