from ctypes import CDLL, RTLD_GLOBAL from ..anke import currentOS class LoadSo: def __init__(self, soPath, args): if currentOS != 'darwin': for arg in args: """ 1、麒麟、UOS环境循环加载需要主动加载的so,可用 2、mac环境调用dylib需要注释该循环,原因未知 报错:OSError("dlopen(, 0x000A): tried: '' (no such file), '/usr/lib/' (not a file), '/Users/mactest/Desktop/ANKE-C/' (not a file), '/usr/lib/' (not a file)") 3、可能的原因: 主插件包是在本地加载的(RTLD_LOCAL),因此,除非使用显式的dlopen后跟dlsym,否则任何人都看不到任何符号。 如果是Linux,我可以通过使用RTLD_GLOBAL标志再次dlopen将该捆绑包升级到全局名称空间,但是在Mac OS X上则不起作用。 但是Mac OS X很好地将内容打包到了包中,因此我只是制作了一个动态库并将其放入插件包目录中。 该库将作为RTLD_GLOBAL自动加载,并且所有Python符号均可用。 """ CDLL(arg, mode=RTLD_GLOBAL) self.xtx = CDLL(soPath)
标签:python,CDLL,GLOBAL,so,dlopen,file,RTLD,加载 From: https://www.cnblogs.com/wtxyear/p/17664538.html