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

标签 c++ c linux shared-libraries

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

问题是主应用程序的功能存在于链中更下游的库之一中,更具体地说是 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/

相关文章:

c - 将节点添加到链表会覆盖

c - C 中对变量求和的函数

linux - 从文本文件中删除注释行

php - 一个特定文件夹中新文件的默认 chmod

C++ OpenGL 窗口和上下文创建框架/库

c# - 从已部署的应用程序中检索最后一次提交 ID/修订号

c++ - 将包含目录添加到 AUTOMOC

c++ - 运算符重载 << 错误

c++ - c/c++ Linux 允许的最大互斥量

linux - 如何在crontab中指定每天运行的文件