python - 当有多个同名(和不同符号)的共享库时,Python 只加载一个共享库
问题描述
我正在尝试加载两个不同的模块,它们链接到同一共享库的不同版本。
这是问题的伪代码;其中 UserModule 需要与初始模块相同的库和符号。
# dummy load initial module
import ctypes
ctypes.CDLL('/path/to/different/libname.so')
# load another module
import UserModule
ImportError:/path/to/UserModule/libUserModule.so:未定义符号
我可以使用 ctypes.CDLL('libdl.so').dlclose() 删除初始共享库,然后加载下一个库。但我想要一种方法让它们同时加载到内存中,而不会造成这种混乱。
我也尝试使用
# try to load memory locally
import sys
import DLFCN
sys.setdlopenflags( DLFCN.RTLD_NOW | DLFCN.RTLD_LOCAL )
# dummy load initial module
import ctypes
ctypes.CDLL('/path/to/different/libname.so')
# load another module
import UserModule
但它失败并出现同样的错误。
有什么方法可以将具有相同名称的模块加载到 python 中的内存中,以便与不同的模块一起使用?
编辑:为了更准确地回答这个问题。Python 将共享库加载到内存中。当我尝试导入另一个链接到具有相同名称的不同共享库的模块时,python 似乎没有加载到这个新的共享库中。为什么会出现这种情况?
解决方案
推荐阅读
- azure-application-insights - Application Insights 和 Azure 流分析查询将整个自定义维度导出为字符串
- java - 使用 '
swift - 迁移到 Swift 4.2 后模糊使用“过滤器” - server - 如何检查我的服务器是专用的还是从 cpanel 共享的?
- c# - 在循环中创建对象时实体框架变慢
- javascript - 浏览器导航到文件下载时如何显示页面内容?
- javascript - 如何在 ejs 中使用脚本功能?
- laravel-5 - 无法读取未定义的属性“DT_RowId”
- ada - “for XXX use”子句对空记录有意义吗?
- mongodb - 第二次运行相同代码时pymongo重复ID错误