【问题标题】:Reloading a library using dynamic loading in C++在 C++ 中使用动态加载重新加载库
【发布时间】:2012-12-31 13:49:41
【问题描述】:

如果我在 C++ 中使用动态加载打开一个库,我可以稍后重新加载同一库的更新版本吗?我自己会对此进行测试,但在我开始研究它作为我正在做的某事的潜在解决方案之前,我很好奇它的可行性。

以防万一,我在 Linux 上运行。能够使其在其他操作系统上运行会很好,但这不是必需的。

【问题讨论】:

  • 我看不出为什么你不能在用你的实际代码测试它之前用Hello world 测试它。时间不能超过 5 分钟。
  • 因为我以前没有使用过动态加载,我想确保没有我没有预见到的情况。一些最严重的错误是,在基本测试之后,事情似乎正常运行,然后由于不可预见的情况而崩溃。
  • 确保库 (1) 返回所有操作系统资源 (2) 删除所有分配的内存 (3) 在卸载库之前删除所有指向库的指针。
  • 谢谢。我会确保注意这些事情。

标签: c++ dlopen dynamic-loading


【解决方案1】:

从技术上讲,您当然可以——没有什么可以阻止您这样做。这就是dlopen()/dlclose() 在用户空间中的工作方式。这也是内核加载和卸载动态模块等的方式。但是,实际上,编写不佳的共享对象或主机程序可能会在渲染进程(或内核,如果您正在谈论内核模块)时引入灾难性的副作用无法使用。

【讨论】:

    【解决方案2】:

    正如已经回答的那样,这应该可行。关于 dlopen / dlclose 在 C++ 中的干净用法,你应该看看这个答案 C++ Dynamic Shared Library on Linux

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-27
      • 2014-06-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多