![]() |
1
lixile 2 天前
funcs.so rpath 设置为 $ORIGIN 把你要的版本 libcrypto.so 跟 funcs.so 放在同一路径下一起打包给 conda
必要时 可改名你要的版本 libcrypto.so |
![]() |
2
ospider 2 天前
有个工具叫 auditwheel, 专门修改 python 打包进去的 so 文件符号名的
|
3
nowheremanx OP 差点因为这个技术问题想退出码农生涯了,折磨了 3 天,搞得胃酸倒流,腰酸背痛。 关键这些问题完全是浪费生命,我宁愿 CRUD 写写业务。
然后反馈下最后解决方案吧。 最后是另外做了一个 python 包,用户通过 pip 安装。然后 ctypes 载入.so 的动作一定要放在所有的 import 之前,不然总是会有 segmentation fault ,这个可能和 rpath 的设置有关,应该是其他库对于底层动态库的引用做了隐式改变。 这个坑我是这辈子都不想踩了,真恶心啊。 |
![]() |
4
pursuer 1 天前
c/c++的 ABI 和版本问题一直存在,所以微软搞了 COM 。同时依赖不同版本对于很多语言/平台都是比较麻烦的问题,只能指望开发人员做好兼容处理。
“拓展一下,如果我要写一个 C++程序也用到这个 otherlib 库,但同时又有一个依赖需要高版本 libcrypto.so ,那我是不是就没办法编译了?” 静态链接并做符号隔离(RTLD_LOCAL)可能可以解决,但如果可能,我觉得还是做成 RPC 的调用方式会简单一点。 |
5
julyclyde 1 天前
openssl 可以同时装多个版本的
compat-openssl10 |