c++ - 可选共享库

标签 c++ shared-libraries dynamic-linking

我注意到依赖共享库的应用程序失败:如果您缺少某些依赖项,应用程序将在加载时失败即使用户无意使用依赖项的功能。

我希望我的应用程序比这更好。理想情况下,与其分发多达 n 个不同的包, 其中 n = numberOfSupportedArchitectures * numberOfSupportedOS * ‖(对于每个共享库)(备选方案的数量) 当发现我想要但不需要的库不存在时,我会在加载时发现“加载共享库时出错”异常,然后以一种简单地避免使用未解析链接的方式继续执行担心的。但显然没有人能捕获异常(exception)。如果缺少某些东西,它甚至在 main() 开始之前就全部折叠了。

我最接近控制加载过程的方法是自己使用 dlopen、dlsym 等解决所有链接。太烦人了。我希望已经有一个图书馆可以为我做这件事?

我注意到这在基于源代码的发行版或 Windows 上都不是问题。我打算将二进制包放入标签中,但显然我没有硬币标签的代表。

'似乎最优雅的解决方案在于改进操作系统的加载器/链接器的行为。

最佳答案

可以看看weak symbols .然而,这不是 C 或 C++ 标准的一部分——因此有点依赖于编译器。但是,如果您打算使用 GCC,我想它会适合您。

关于c++ - 可选共享库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8610083/

相关文章:

c++ - 当函数不存在时 SFINAE 回退

c++ - 我们如何在 C++ 和 Windows API 中验证 openssl 数字签名

相当于Rust枚举的C++

c - 符号版本控制和 dlsym

objective-c - 将框架链接到 QuickLook 插件

c++ - 创建窗口(): Type name is not allowed

jenkins - 从同一存储库加载 Jenkins Pipeline 共享库

c - 使用 Eclipse 在 Mac 上共享库

c++ - 与生成的 protobufs 的静态链接导致中止

c++ - 创建 C++ API 库