zoukankan      html  css  js  c++  java
  • 静态链接库与动态链接库 (二)动态链接库的编译与使用

    上一篇文章里大概描述linux下静态链接库的编译与使用,下面讲动态链接库的编译与使用方法。

    1. 什么是动态链接库

        所谓动态链接库,是指编译的时候不会把程序引用到的库插入到执行程序里,而是在执行时候才会去加载相关的库,所有用到此库的程序可以共享一份代码。

        这样带来的好处是可执行程序所占的空间变小了,同时,如果库需要升级,你并不需要重新编译你的程序,只要把相关的库升级即可。

    2. 动态链接库的编译与使用方法

        使用和上一篇文章相同的代码:main.c  sum.c  sum.h  

        在 linux 下动态链接库文件一般是这样的名字: libxxx.so

    复制代码
    
    lv@lenovo: $ ls
    main.c    sum.c    sum.h
    lv@lenovo: $ 
    lv@lenovo: $ gcc -c -fPIC sum.c                    ##  -fIPC告诉编译器将源代码编译成共享的object文件,PIC(Position-Independent Code)意思是非位置依赖性代码
    lv@lenovo: $ ls
    main.c    sum.c    sum.h    sum.o
    lv@lenovo: $ gcc -shared -fPIC -o libsum.so sum.o  ##  生成动态链接库文件libsum.so
    lv@lenovo: $ ls
    libsum.so    main.c        sum.c        sum.h        sum.o
    lv@lenovo: $ 
    lv@lenovo: $ gcc -o sumappd main.c -L . -lsum      ##  生成可执行程序
    lv@lenovo: $ ls
    libsum.so    sum.c        sum.o
    main.c        sum.h        sumappd
    lv@lenovo: $ ./sumappd                             ##  运行生成结果
    Num1 + Num2 = 3
    

          结论: 编译时”-lsum“的方式,是不能够区分当前是静态链接还是动态链接的。

                     如果在同一个目录下同时有静态链接库和动态链接库,则系统默认会引用动态链接库,如果想使用静态链接库则需要在编译时加上”-static“参数。

       

         (注:若使用C++编写,编译的时候将 gcc 改用 g++ 即可)

  • 相关阅读:
    Button与ImageButton的区别
    TCP、HTTP、Socket
    ASPX开发基础
    WebForm复杂控件
    Webform 内置对象 Session对象、Application全局对象,ViewState
    JavaScript
    .net
    postman-学习笔记
    2021第一天上班,立个flag
    js函数累加
  • 原文地址:https://www.cnblogs.com/lvchaoshun/p/5966788.html
Copyright © 2011-2022 走看看