gpt4 book ai didi

c++ - Linux,共享库使用主程序中的函数而不是其他共享库

转载 作者:IT王子 更新时间:2023-10-29 01:26:39 26 4
gpt4 key购买 nike

我正在构建一个从应用程序(我无法控制)加载的共享库。我的库使用其他共享库,而这些共享库又使用其他共享库,复杂但并不罕见。

问题是主应用程序的功能存在于链中更下游的库之一中,更具体地说是 openLDAP 反过来使用 openSSL功能:

Main app->My library->openLDAP libraries->openSSL libraries

我的猜测是主应用程序正在通过静态链接或简单的源代码复制/粘贴来实现 openSSL

我的问题是:我可以控制 openLDAP 从我的库中使用哪些函数,还是我必须重新编译 openLDAP 并静态链接到 openSSL?

由于安全问题,openSSL 更新得相当频繁,如果不需要的话,我不想要它的静态拷贝。为什么要重新分发 openLDAP 的专有拷贝,因为它是大多数分发包的一部分......

最佳答案

现在您拥有的是覆盖系统默认选择 OpenSSL 库的可执行文件。这样做是在可执行文件的权限范围内,您无法真正阻止它。

在您的库中静态链接 OpenSSL 可能也不是真正的解决方案。一方面,如果可执行文件确实使用不同的版本怎么办?另一方面,如果 OpenSSL 有一些全局变量怎么办?现在您将在同一个进程中拥有库的两个拷贝,这不是一个好主意,并且可能会导致错误。

对我来说,我们在 Linux 上的最佳答案是不要将此类事情视为问题。如果可执行文件加载了错误版本的 OpenSSL,那不是您的库的错。您最多可以检查加载了哪个版本,如果已知它由于某种原因与您的库不兼容则拒绝运行。

关于c++ - Linux,共享库使用主程序中的函数而不是其他共享库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26271777/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com