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

时间:2019-04-24 16:17:04

标签: python shared-libraries ctypes

我尝试加载两个不同的模块,它们链接到同一共享库的不同版本。

这是问题的伪代码;其中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。为什么会这样?

0 个答案:

没有答案