1

在我的项目中,我试图使用两个已经编译和生成的库。让我们说 liba.so(我们自己的库在某个时候创建​​)和 libssl.so.10。(它在 Linux 中可用)。

现在 liba.so 具有依赖项 libcurl.so.3 和 libssl.so.10 具有依赖项 libcurl.so.4(最新)

libcurl.so.3 和 libcurl.so.4 在系统中都可用。

因此,当我尝试在我的项目中同时使用它们时,我遇到了版本冲突。是预期的吗?如果是,我该如何解决这个问题?

有没有办法用最新的 libcurl.so.4 修改 liba.so 依赖项而无需再次构建这个库?或者我是否需要使用最新的 libcurl.so.4 再次构建 liba.so?

谢谢你的帮助

4

1 回答 1

1

因此,当我尝试在我的项目中同时使用它们时,我遇到了版本冲突。是预期的吗?如果是,我该如何解决这个问题?

有两种解决方案。

首先,您将携带您想要使用的 libcurl.so 和 libssl.so 的版本。然后,您将使用链接器rpathLD_LIBRARY_PATH确保加载包含的共享对象。

其次,您将建立您liba.so的静态链接libcurllibssl.

如果您使用的是 Android,那么第二个是您的选择。那是因为 OpenSSL 包含在 Android 中,zygote 加载它,并且您总是在 zygote 的 fork 之后获得下级版本 0.9.8。

在 Android 上,如果您想要的只是像 1.0.1 这样的现代 OpenSSL(看起来很像您正在使用的libcurl.so.3和的情况libcurl.so.4),您甚至需要构建一个包装共享对象。

于 2014-02-26T05:05:11.353 回答