动态链接库

 
此文是这几天的工作总结,写的不正确的地方欢迎大家交流探讨。

-什么是动态链接库?
主程序可以在需要的时候链接,不需要的时候闲置(不占主程序内存)。而动态链接库里的内容往往是一些函数的接口实现,库对外部只提供函数的接口。在 linux 下动态链接库就是XX.so文件,在windows下就是XX.dll文件。

-为什么要使用动态链接库?
在我们实际应用中,有些函数在程序中被调用的很少,但是不可或缺,这样如果直接将其写在主程序中会占用主程序内存等资源;另外当一个项目非常大,需要很多人参与,想想如果每个人都将其功能放在主函数中,这样调试起来很麻烦,而且迁一发而动全身,也许更改了某个功能后,整个程序就得全部更改。为了避免以上两点,动态链接库是一个很好的选择。

-Linux下动态链接库的使用
1.生成动态链接库,我们要生成一个含有加法接口名为libarg.so的动态链接库

      声明函数: // arg.h
      extern “C” int add(int a, int b)
      {
                    return a+b;
      }
  生成arg.so文件:   g++ -fPIC arg.h ld -shared -o libarg.so

2 动态链接库的显式加载 // include “dlfcn.h”
要在程序中使用libarg.so 中的add接口,在此显式的动态加载。

typedef int(*ADD)(int a,int b);     //定义add函数别名为ADD 
void* handle = NULL;
handle = dlopen(“.so文件的绝对路径”,RTLD_NOW);//需要绝对路径
    if(NULL == handle){    //加载失败,一般时路径问题
       std::cout<<“Failed reason: ”<<dlerror()<<\n’;     
    }
ADD  add_h = (ADD)dlsym(handle,”add”);
int result = add_h(5,6);                               
dlclose(handle);                  
在此,基本的用法就时这样了,若加载函数错误,或者加载动态库错误,则可以打印dlerror()来查看错误原因。
linux下编译: g++ -o main main.cpp -l dl //注意加上-l dl
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值