【CC++】静态库 动态库

目录

1. 库的定义和分类

  1. 概念

    • 动态库:

      • Linux上称为:共享对象库; 文件后缀 .so
      • windows 动态加载函数; 文件后缀 .dll
    • 静态库:

      • 在程序执行之前 就加入到 目标程序中去了;
  2. 库文件位置

    1. GNU标准建议所有的函数库文件都放在/usr/local/lib目录下,
    2. 而且建议命令可执行程序都放在/usr/local/bin目录下

    具体的位置信息: /etc/ld.so.conf
    库环境变量:LD_LIBRARY_PATH

2. 静态库 & 动态库 创建

2.1. 静态库

源文件 ==> 可执行文件:预编译、编译、汇编、链接;

  1. 编译
    gcc -O -c c文件
    gcc -O -c pr1.c pr2.c
    
  2. 链接静态库
    ar -rsv libpr.a pr1.o pr2.o
    libpr.a:库文件名;
    
  3. 编译链接
    //使用 main.c 进行编译;
    gcc -o main main.c -L./ -lpr
    ./main
    

2.2. 动态库的创建

2.2.1. 动态库的创建步骤

  1. 需要有头文件和源文件
  2. 生成动态库
    gcc -fPIC  -shared -o lib动态库名.so  xxx.c
        PIC:位置无关的代码
    gcc -shared -fPIC -o libfunction.so function.c
    
  3. 链接动态库
    gcc  main.c -L. -l动态库名
    gcc test.c -o test -L/home/zxin10/van/ -lfunction
    
  4. 使用动态库
    使用动态库:
     系统默认缺省路径: /lib64/
                      /usr/lib64/
    配置一下环境变量  export LD_LIBRARY_PATH=.
    

2.2.2. 动态库的动态加载

采用dlopen、dlsym、dlclose加载动态链接库

  • dlopen

  • dlsym

  • dlclose

2.2.3. C++ 动态库的创建

//简单示例

  1. 编译
    g++ -shared -fPIC -o libfun.so fun.cpp
    
  2. 链接
    g++ test.cpp -o test3 -L. -llibfun
    

2.3. 动态库的交叉调用

2.3.1. C调用C++库

  1. 需要修改动态库的头文件,保证兼容性
    //修改动态库的头文件function.h
    #ifndef COMM_FUNC_H_
    #define COMM_FUNC_H_
    
    #ifdef __cplusplus
    extern "C" {
    #endif
    
    int add(int a, int b);
    
    #ifdef __cplusplus
    }
    #endif
    
    #endif
    

3. 动态库常用命令

  1. nm
  2. LDD
  3. READELF
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值