可选的共享库

时间:2011-12-22 21:46:16

标签: c++ shared-libraries dynamic-linking

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

我希望我的应用程序比这更好。理想情况下,而不是分发n个不同的包, 其中n = numberOfSupportedArchitectures * numberOfSupportedOS * Π(对于每个共享库)(替代数量) 我在加载时发出“加载共享库时出错”异常,当我想要但不需要的库时,发现它不存在,然后以一种简单避免使用未解析链接的方式继续执行关心。但显然,人们无法捕捉到这一点。如果缺少某些东西,那么在main()开始之前它都会崩溃。

我能控​​制加载过程的最接近的是使用dlopen,dlsym等解决所有链接。太无聊了。我希望已经有一个图书馆可供我这样做了吗?

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

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

2 个答案:

答案 0 :(得分:2)

您可以查看weak symbols。但是,这不是C或C ++标准的一部分 - 因此有点依赖于编译器。但是,如果你要去GCC,它会为你工作,我猜。

答案 1 :(得分:0)

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