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. 加载速度较静态库较慢
  • 相关阅读:
    Android 锁屏消息调研
    [GODOT]可复用移动组件(载具类)
    [GODOT]技能系统初探
    [GODOT]获取节点
    美丽的秋天
    生活
    day7.17
    html
    day 2015.6.08
    不会转载只能先留下网址了
  • 原文地址:https://www.cnblogs.com/wanghao-boke/p/11294197.html
Copyright © 2011-2022 走看看