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)