当有多个共享库具有相同的名称(和不同的符号)时,Python只加载一个共享库

2024-09-28 22:38:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试加载两个不同的模块,它们针对同一共享库的不同版本进行链接。你知道吗

下面是问题的伪代码;其中UserModule需要与初始模块相同的库和符号。你知道吗

# dummy load initial module 
import ctypes
ctypes.CDLL('/path/to/different/libname.so')

# load another module
import UserModule

导入错误:/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似乎没有加载到这个新的共享库中。为什么会发生这种情况?你知道吗


Tags: 模块topath内存importso链接符号