zoukankan      html  css  js  c++  java
  • Linux之动态库

      

    命令规则

      lib + 名字 + .so

    制作步骤

      1)生成与位置无关的代码(生成与位置无关的代码)

      2)将.o打包成共享库(动态库)

    发布和使用共享库

    动态库运行原理:

    生成动态库:

      gcc -fPIC -c *.c -I ./include

    打包动态库并移动

    使用动态库:

    /***
    main.c
    ***/
    
    #include<stdio.h>
    #include"MyCalc.h"
    
    int main()
    {
        int a = 10;
        int b = 20;
        int result = a + b;
        printf("a + b = %d
    ",result);
        return 0;
    }

    ubuntu1604@ubuntu:~/wangqinghe/C/sharelib$ gedit main.c

    ubuntu1604@ubuntu:~/wangqinghe/C/sharelib$ gcc main.c -Iinclude -L ./lib/ -lMyCalc -o myapp

    ubuntu1604@ubuntu:~/wangqinghe/C/sharelib$ ls

    app  include  lib  main.c  myapp  src

    ubuntu1604@ubuntu:~/wangqinghe/C/sharelib$ ./myapp

    a + b = 30

    ldd 命令:查看程序执行时依赖的所有的库

    ubuntu1604@ubuntu:~/wangqinghe/C/sharelib$ ldd myapp

           linux-vdso.so.1 =>  (0x00007fffe8d13000)

           libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f92ffac7000)

           /lib64/ld-linux-x86-64.so.2 (0x00007f92ffe91000)

    设置动态库环境变量(临时)

    export LD_LIBRARY_PATH=./lib

    永久生效:

    bansh.rc

    将export LD_LIBRARY_PATH=./lib(绝对路径)

    解决动态库无法加载

    1. 需要找到动态链接器的配置文件
    2. 动态库的路径写到配置文件中
    3. 更新  sudo idconfig -v

    cd etc

    ls -l ld.so.conf

    vi ld.so.conf

    (o 在当前行下行创建一行)

    将动态库路径写到该配置文件中(绝对路径)

    sudo idconfig -v

    动态库的优点:

    1. 执行程序体积小
    2. 动态库更新方便(接口没变)

    缺点:

    1. 发布程序时,需要将动态库发布给用户
    2. 加载速度较静态库较慢
  • 相关阅读:
    树莓派摄像头直播程序,非常希望有贡献者一起玩
    Ansible 操作windows
    Python实现自平衡二叉树AVL
    Python非递归遍历多叉树
    Python 非递归遍历图
    使用ffmpeg进行网络直播
    Python安装mysqldb
    运维工程师速成
    科幻小说《霜与火》 by 雷·布雷德伯里
    jvm 内存调整
  • 原文地址:https://www.cnblogs.com/wanghao-boke/p/11294197.html
Copyright © 2011-2022 走看看