- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在构建一个从应用程序(我无法控制)加载的共享库。我的库使用其他共享库,而这些共享库又使用其他共享库,复杂但并不罕见。
问题是主应用程序的功能存在于链中更下游的库之一中,更具体地说是 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/
我有一个主程序X,它从我的网络摄像头获取数据。 我想在执行时实时配置 X。 我知道这样做的常见方法之一是使用IPC,如命名管道/Unix套接字/互联网套接字等。但我想避免每个调用者必须单独打开套接字/
信号可以在任何线程或主程序本身中接收。我从主程序创建了一个辅助线程。所以我的程序中有两个线程 1. 主线程(进程本身) 2. 辅助线程。我只希望每当信号到达我的辅助线程时,它应该向我的主线程(程序)发
我在 java 中有一个主类,它调用 JFrame Two。 但在调用 JFrame Two 之前,我的主要检查一个条件,如果为真,则调用 JFrame One。 所以,我的 main 不扩展 JFr
我正在尝试编译一个 C++ 程序,但它不起作用。首先,我应该说 c++ 不是我真正了解的语言,我使用 Fortran。无论如何,主要的 c++ 程序调用一个 fortran 子例程。我可以编译这个子例
我正在尝试将 Rust 绑定(bind)到 nbdkit,但运气不佳。我需要制作一个 .so 文件,这很简单。 .so 文件必须有一个名为 plugin_init 的公共(public)函数,这也很简
QT 似乎是最好的跨平台 GUI 工具包。不幸的是,它是在 C++ 中,它与许多有趣的语言(例如 *nix 上的 D、Rust、Julia 和 Mono)的绑定(bind)要么不可用,要么没有维护。
我有一个 Maven 项目,它在 src 文件夹中的一个包中有 2 个主程序(MyTestApp_A 和 MyTestApp_B)。 如果我打开它们并单击运行按钮,我可以在 Eclipse 中运行这些
我是一名优秀的程序员,十分优秀!