zoukankan      html  css  js  c++  java
  • Linux C/C++编程之(十)动态库的制作和使用

    一、概述

    在这里插入图片描述

    二、动态库的优缺点

    机制:

    • 共享库的代码是在可执行程序运行时才载入内存的,在编译过程中仅简单的引用,因此代码体积较小。

    优点:

    • 节省内存(共享)
    • 易于更新(动态链接)
      • 停止运行程序
      • 使用新库覆盖旧库(保证新旧库名称一致,接口一致)
      • 重新启动程序

    缺点:

    • 延时绑定,速度略慢

    使用场合:

    • 对速度要求不是很强烈的地方都应使用动态库

    注意事项:

    • 动态库是否加载到内存,取决于程序是否运行

    命名格式:

    1. lib开头
    2. 动态库名
    3. .so结尾

    三、动态库的制作

    (1)制作步骤

    1)生成“与位置无关“的目标文件。

    gcc -fPlC a.c b.c c.c -c
    
    • 参数:-PIC 表示生成与位置无关代码
    • 执行完毕后生成一系列的 .o 文件

    2)制作动态库

    gcc -shared -o libmytest.so a.o b.o c.o
    
    • 参数:-shared 制作动态库
    • -o:重命名生成的新文件

    3)使用动态库

    gcc main.c -L ./ -Imytest -I / -o app
    
    • -L–>指定库所在的路径
    • 去掉前缀 lib
    • 去掉后缀 .so
    • 只留下中间部分
    • -I–>头文件目录位置

    /.app–>运行失败

    • 查看依赖的共享库:ldd app 发现 libmytest 找不到
    • 没有给动态链接器(ld-linux.so.2)指定好动态库 libmytest.so 的路径
    • 解决方案
      1. 临时设置:export LD_LIBRARY_PATH=库路径,将当前目录加入环境变量,但是终端退出了就无效
      2. 永久设置:将上条写入家目录下 .bashrc 文件中
      3. 粗暴设置:直接将 libmytest.so 文件拷贝到 /usr/lib/【/lib】目录下。(受 libc 库的启发)
      4. 将 libmytest.so 所在绝对路径追加入到 /etc/ld.so.con 文件,使用 sudo ldconfig-v 更新

    (2)实际操作

    • 生成 .o 目标文件,文件路径和内容同上,进入到 src 目录,生成 .o 目标文件:
      在这里插入图片描述
    • 将 .o 文件打包生成动态库
      在这里插入图片描述
    • 使用生成的动态库,-L 指定动态库路径 -l 指定库名
    gcc main.c -o main -I include/ -L ./lib -lCalc
    
    • 退出到 dongtai 目录下,将动态库拷贝到 lib 目录下并编译 main.c 并执行 main:
      在这里插入图片描述
      无法找到动态库目标文件,解决方法有三个:

    (1)拷贝到 /lib 下(不允许,容易与别人库命名重合)
    在这里插入图片描述
    (2)将库路径增加到环境变量 LD_LIBRARY_PATH 中(不是特别推荐)
    在这里插入图片描述
    (3)配置 /etc/ld.so.conf 文件,增加 /home/linux/dongtai/lib/ 路径,执行 ldconfig -v,并执行 main
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    四、动态库

    在这里插入图片描述

  • 相关阅读:
    Object-C,NSSet,不可变集合
    NYIST 860 又见01背包
    NYIST 1070 诡异的电梯【Ⅰ】
    HDU 1542 Atlantis
    HDU 4756 Install Air Conditioning
    CodeForces 362E Petya and Pipes
    HDU 4751 Divide Groups
    HDU 3081 Marriage Match II
    UVA 11404 Palindromic Subsequence
    UVALIVE 4256 Salesmen
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13302540.html
Copyright © 2011-2022 走看看