首页 > 解决方案 > 当有多个同名(和不同符号)的共享库时,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 似乎没有加载到这个新的共享库中。为什么会出现这种情况?

标签: pythonshared-librariesctypes

解决方案


推荐阅读