zoukankan      html  css  js  c++  java
  • 静态库与动态库

    gcc工作流程和编译原理

      1. 预处理 gcc -E
      2. 编译 gcc -S
      3. 汇编 gcc -c
      4. 链接 没参数

    gcc的参数

      -I 指定头文件的路径
      -o 指定生成的文件名
      -D 在编译的时候给代码定义宏
      -O 优化程序 后面跟 0 1 2 3 这是优化等级
      -Wall 在程序编译的时候提示警告信息 比如定义了变量没有使用
      -g 在程序中添加调试信息
      -c 只编译子程序
      -L 指定所用的库的目录
      -l 指定库的名字 掐头去尾

    静态库的制作

      1>.命名规则

        lib + 库的名字 + .a 例如 libmytest.a

      2>.制作步骤

        1). 生成对应的.o文件 --------- .c --->.o -c
        2). 将生成的.o文件打包 ar rcs + 静态库的名字(libmytest.a)+ 生成的所有的.o

      3>.发布和使用静态库:

        1). 发布静态库
        2). 头文件

      4>.静态库的优缺点:(由于库在编译的时候直接被打包到应用程序中,所以会有对应的优缺点)

        优点:
          1).发布程序的时候,不需要提供对应的库
          2).加载库的速度快
        缺点:
          1).库被打包到应用程序中,导致应用程序的体积很大
          2).库一旦发生了改变,应用程序都需要重新编译

    动态库(共享库)的制作和使用:

    1>.命名规则:

      1). lib + 名字 + .so

    2>.制作步骤:

      1). 生成与位置无关的代码(生成与位置无关的.o) gcc -fPIC -c *.c 多个参数-fPIC
      2). 将.o打包成共享库(动态库)

    3>.发布和使用共享库

    4>. 解决程序执行时动态库无法被加载的问题:

      1)放到系统的库目录中 --- 不允许使用
      2) 临时测试 (终端关闭后就会失效)
        环境变量: LD_LIBRAREY_PATH 将动态库的路径设置给该变量
        将设置的值,导入到系统环境变量中: export LD_LIBRARY_PATH
      3) 不常用的方法(永久设置):
        在家目录的.bashrc文件中添加一句话: export LD_LIBRATRY_PATH=动态库目录的绝对路径
        .bashrc修改完成,需要重启终端
      4)
        1. 需要找到动态连接器的配置文件 -- /etc/ld.so.conf
        2. 动态库的路径写到配置文件中(绝对路径)
        3. 更新 --- sudo ldconfig -v

    5>. 动态库的优缺点

      优点
        1. 执行程序体积小
        2. 动态库如果更新了 不需要重新编译程序 (函数接口不变)
      缺点:
        1.发布程序的时候,需要将动态库提供给用户
        2.动态库没有被打包到应用程序中,所以调用起来相对较慢一些

  • 相关阅读:
    nodejs下载图片保存本地
    anaconda基本命令
    1.购买腾讯学生服务器遇到的坑
    git 命令
    JS深拷贝递归实现
    Object.prototype.toString()
    Spring核心知识点
    Spring核心知识点
    Spring核心知识点
    Spring基础知识点
  • 原文地址:https://www.cnblogs.com/wangweigang/p/9608278.html
Copyright © 2011-2022 走看看