超级好用的C++实用库之动态库加载器

💡 需要该C++实用库源码的大佬们,可扫码关注文章末尾的微信公众号二维码,或搜索微信公众号“希望睿智”。添加关注后,输入消息“超级好用的C++实用库”,即可获得源码的下载链接。

概述

        在C++中,动态库也称为共享库或DLL,是一种可执行文件形式,其中包含可以被多个应用程序同时加载并使用的函数和数据。相较于静态库,动态库在运行时而不是编译链接阶段被程序所使用。加载动态库,在Windows和Linux操作系统下使用的API函数有所不同。

        Windows操作系统下,动态库的扩展名通常为.dll(Dynamic Link Library),可以使用LoadLibrary、GetProcAddress和FreeLibrary等函数来操作。

        Linux操作系统下,动态库的扩展名通常为.so(shared object)。使用dlopen、dlsym和dlclose等函数来加载、查找符号以及卸载动态库。

CHP_DynLoader类

        为了对应用层屏蔽Windows和Linux操作系统的差异,我们封装了CHP_DynLoader类,以提供统一的接口,便于上层进行调用。CHP_DynLoader类的头文件,可参考下面的示例代码。

#pragma once

class CHP_DynLoader
{
public:
    CHP_DynLoader();
    ~CHP_DynLoader();

    int Open(const char *pszFileName);

    void *GetFunc(const char *pszFuncName);

    void Close();

private:
    typedef void *HDynLoader;

    HDynLoader m_hLoader;
};

        可以看到,CHP_DynLoader类比较简单,只有如下三个公共接口。

        Open:打开指定的动态库。参数pszFileName为动态库的文件名,返回值为0表示成功,否则为错误码。

        GetFunc:获取指定名称的函数指针。参数pszFuncName为函数名称,返回值为函数指针,非NULL表示成功,否则失败。返回的void *可以转换为需要的函数指针形式。

        Close:关闭动态库。关闭后,可重新调用Open函数打开另一个动态库。

总结

        使用动态库具有如下几个优点。

        资源共享:多个进程可以共享同一份库的副本,从而节省内存空间。

        升级便捷:只需替换库文件即可更新所有依赖该库的应用程序功能,无需重新编译链接。

        模块化:有利于软件架构的模块化设计和部署。

        当然,使用动态库也有自身的一些缺点,主要有如下两点。

        依赖问题:程序运行时,必须能找到对应的动态库文件。否则,会因找不到库而导致运行失败。

        性能开销:首次加载库会有一定的性能损耗,包括查找、加载以及解决符号依赖等。

相关推荐

  1. 超级C++实用动态

    2024-05-11 08:24:02       30 阅读
  2. 超级C++实用日志类

    2024-05-11 08:24:02       37 阅读
  3. linux动态

    2024-05-11 08:24:02       43 阅读
  4. Android Studio项目预编so

    2024-05-11 08:24:02       43 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-11 08:24:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-11 08:24:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-05-11 08:24:02       87 阅读
  4. Python语言-面向对象

    2024-05-11 08:24:02       96 阅读

热门阅读

  1. axios常用配置

    2024-05-11 08:24:02       33 阅读
  2. npm详解

    2024-05-11 08:24:02       28 阅读
  3. 【服务治理中间件】consul介绍和基本原理

    2024-05-11 08:24:02       33 阅读
  4. Express中间件(完善)

    2024-05-11 08:24:02       32 阅读
  5. VUE----数字增加,兼容小程序

    2024-05-11 08:24:02       31 阅读
  6. Android Gradle的插件

    2024-05-11 08:24:02       28 阅读
  7. sass 详解

    2024-05-11 08:24:02       40 阅读
  8. 人工智能对企业安全的影响与风险控制-内刊

    2024-05-11 08:24:02       26 阅读
  9. Oracle行锁怎么杀

    2024-05-11 08:24:02       29 阅读
  10. rviz与urdf

    2024-05-11 08:24:02       31 阅读
  11. [补题记录] StarryCoding 入门教育赛3 D.电弧陷阱

    2024-05-11 08:24:02       29 阅读
  12. 前端Vue怎么获取登录的用户名或用户id

    2024-05-11 08:24:02       36 阅读