mac环境python加载so库报错: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)")

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)

 

posted @ 2023-08-29 13:41  梧桐潇雨  阅读(206)  评论(0编辑  收藏  举报