可选的共享库

Optional shared libraries

本文关键字:共享      更新时间:2023-10-16

我注意到一个依赖于共享库的应用程序的失败:如果你缺少一些依赖项,即使用户无意使用依赖项的功能,应用程序也会在加载时失败

我希望我的应用程序比这更好。理想情况下,不要分发多达n个不同的软件包,where n = numberofsupportedararchitectures * numberOfSupportedOS * ∏(每个共享库)(备选库的数量)当发现我喜欢但不需要的库不存在时,我会在加载时捕获"加载共享库时出错"异常,然后以一种简单地避免使用未解析的相关链接的方式继续执行。但显然没有例外。如果有些东西丢失了,在main()开始之前,它就会掉下来。

我能得到的最接近于控制加载过程的方法是自己用dloopen, dlsym等来解析所有链接。所以无聊。我希望已经有一个图书馆可以为我做这件事了?

我注意到这在基于源代码的发行版和windows上都不是问题。我本来打算把二进制包放在标签里的,但显然我没有权限创建标签。

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

您可以查看弱符号。然而,这不是C或c++标准的一部分——因此有点依赖于编译器。但是如果你选择GCC,我想它会为你工作的。

您可以自己包含共享库并通过-rpath $ORIGIN调整链接器搜索路径。