zoukankan      html  css  js  c++  java
  • unix/linux共享库(动态库)简介

    一、创建共享库:
    1.写源程序 xxx1.c xxx2.c.../*.c(通配符方式)
    2.编译源程序,加-fpic生成.o文件
    gcc -c -fpic xxx1.c xxx2.c.../*.c(通配符方式)
    3.生成共享库文件
    gcc -shared xxx.o -o libxxx.so
    4.提供头文件,方便调用

    二、使用共享库
    1.写调用源程序 xxx.c
    2.编译源程序,生成.o文件
    3.链接共享库文件
    gcc test.o -l xxx(共享库去掉lib前缀和.a后缀剩下的名字) -L . ----------{PATH}
    如果操作系统支持环境变量LIBRARY_PATH,使用该环境变量可以省略-L
    4.执行
    执行期间,动态加载共享库,系统会自动查找LD_LIBRARY_PATH环境变量中的路径,确定共享库的位置,如果找不到
    共享库文件,程序会执行失败。(静态库不需要)


    三、显式加载和使用共享库
    #include<dlfcn.h>
    void *dlopen(const char *filename,int flag);
    //filename:so文件名
    //flag:打开方式
    //返回值:void *,表示打开后的共享库文件指针
    char *dlerror(void);
    //检查dlopen打开共享库是否成功
    //返回空指针表示打开成功
    //返回非空字符串表示打开失败,字符串内容包含失败原因
    void *dlsym(void *hanlde,const char *symbol);
    //使用dlsym获取打开后的共享库中的函数
    //hanlde,需要使用的共享库地址,dlopen的返回值
    //symbol,需要调用的函数名
    //返回值:void *,使用时需要自行转换为对应函数类型
    int dlclose(void *handle);
    //关闭共享库,释放内存
    其中dlopen的参数flag的含义如下:
    RTLD_LAZY:符号查找时候才加载。(使用时加载到内存)
    RTLD_NOW:马上加载。(打开即加载到内存)

  • 相关阅读:
    OO第三单元总结
    OO第二单元总结
    OO第一单元总结
    OO第四单元总结
    OO第三单元总结
    OO第二单元总结
    OO第一单元总结
    BUAA_OO_2020_Total_Summary
    BUAA_OO_2020_Unit3_Summary
    BUAA_OO_2020_Unit2_Summary
  • 原文地址:https://www.cnblogs.com/alphain/p/11008150.html
Copyright © 2011-2022 走看看