7
|
fadedbee · 技术社区 · 11 年前 |
1
3
在我看来,您需要使用libcrypto.so.0.9.8的一些函数和libcryto.so.1.0.0的一些函数。如果1.0.0中的大多数函数都是必需的,或者是首选,那么请链接libcrypto.so.1.0.0。 您可能需要libcrypto.so.0.9.8中的一些函数,或者您可能有其他充分的理由使用libcrypto.so.0.9.8。 在我看来,如果你从两个库链接,你会得到链接器错误(重复的符号,因为两个库都包含相同的符号)。 如果您需要使用0.9.8,那么使用dlopen动态加载它,并获得您想要与dlsym一起使用的函数回调。 这可以通过以下方式实现:
我认为这可能会解决你的目的。如果首选项是反向的,则在链接和通过程序加载时反转库。 |
2
2
你能制作一个软链接,“指向”libcrypto.so.0.9.8或libcryto.so.1.0.0吗。 给它一个通用名称,然后使用它,那么链接“指向”的库的哪个版本都会被选中?在应用程序安装时,您将软链接设置为指向可用的库版本。如果lib足够向后兼容,你的软件可能会测试到1.0.0,也就是说,你不依赖1.0.0中的0.9.8中没有的东西。 |
3
2
您可以重新生成ssl-0.9.8(不是1.x,因为它包含一些在旧版本上不起作用的东西),并更改makefile中执行最终共享库链接并嵌入SONAME的行 使用从libssl.so.0.9.8更改为libssl.so.0的SONAME重新编译它
它看起来像:
现在,当您针对这个库进行编译时,针对它构建的二进制文件将查找libssl.so.0(在两个版本中都作为符号链接包含) |