在我的项目中,我正在尝试使用已经编译和生成的两个库。让我们说liba.so(我们自己的库在某个时候创建)和libssl.so.10。(它在Linux中可用)。
现在liba.so具有依赖性libcurl.so.3& libssl.so.10具有依赖性libcurl.so.4(最新)
libcurl.so.3和libcurl.so.4在系统中都可用。
因此,当我尝试在我的项目中使用它们时,我遇到了版本冲突。这是预期的吗?如果是,我该如何解决这个问题?
有没有办法修改liba.so与最新libcurl.so.4的依赖关系而不再建立这个库? 或者我是否需要使用最新的libcurl.so.4再次构建liba.so?
感谢您的帮助
答案 0 :(得分:1)
因此,当我尝试在我的项目中使用它们时,我遇到了版本冲突。这是预期的吗?如果是,我该如何解决这个问题?
有两种解决方案。
首先,你会随身携带libcurl.so&的版本。 libssl.so你想用。然后,您将使用链接器的rpath
或LD_LIBRARY_PATH
来确保加载包含的共享对象。
其次,您将构建liba.so
以静态链接libcurl
和libssl
。
如果您使用的是Android,则可以选择第二位。那是因为OpenSSL包含在Android上,zygote会加载它,而你在zygote的分支后总是得到0.9.8的低级版本。
在Android上,你甚至需要构建一个包装器共享对象,如果你想要的只是一个像1.0.1这样的现代OpenSSL(看起来很像你在使用libcurl.so.3
和libcurl.so.4
时所经历的那样)。