静态库和动态库(共享库)

           库:从本质上来说是一种可执行代码的二进制文件,可以被载入内存中执行。
                            库分为:静态库和动态库(共享库)
  
  我们先看一下.C和.Cpp文件如何变成可执行文件的:
     静态库和动态库(共享库)   1.静态库和动态库的区别:
                 静态库          动态库
在windows下命名           .lib                 .dll .DLL
在linux下命名            libxxx,a                     libxxx.so 
使用时机            链接过程         运行过程
  
   静态函数库在生成.o文件的时候,整个函数库的所有的数据都会整合进.o文件中,它就是.o文件的集合(是个半成品,如果有一辆自行车的话,那么静态函数库就是组成轮胎的一些零件,比如外胎,内胎,支架),通过链接就可以把这些零件(.o文件)组成轮胎了,如果你改变了一个函数库里的其中一个函数,那就是相当换了一个零件,要重新把这些零件组起来,才能再次正确组成轮胎。
   动态函数库是通过gcc生成不可单独执行的可执行文件,什么是不可单独执行呢?就是它的库函数里是没有主函数的,在链接过程中,内存记住了一个相当于链接地址(是个零件的成品,已经是个轮胎了,等需要用的时候只要知道它放在哪就好了)。
   linux存放相应的函数库: /lib  /usr
  
      2.静态库的使用和生成:
    生成: gcc    -c  *.c(函数功能文件,不包括主函数)
              ar     crv   libxxx.a(xxx是你自己起的名字)  *.o ——>libxxx.a
         使用:gcc   -o    main    main.c    -L(path)     -lxxx
                                     此处path 为:绝对路径

      3. 动态库的使用和生成
             生成:  gcc      -shared     -fPIC     -o      libxxx.so      *.c  ——>    libxxx.so
                  gcc      -o     main     main.c        -L(path)        -lxxx         (生成标志是libxxx.so 和main 是绿色的)
            
            使用的时候生成的动态库还不能打开,因为没有在linuxde 的函数库文件里,有两种方法:
            1:将生成的动态库拷贝到默认加载路径下:  /lib   /usr,但是要用到root权限;
            2:修改环境变量LD_LIBRARY_PATH:   export   LD_LIBRARY_PATH=绝对路径;
           我们选第二种方法,然后./main就有运行结果了。
         

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值