Python runtime_library_dirs在Mac上不起作用

发布于 2021-01-29 15:25:02

我有一个Python扩展模块,需要在运行时链接到一些动态库,所以我需要告诉它在哪里寻找它们。我通过在setup.py中指定runtime_library_dirs来做到这一点。这在Linux上工作正常,但在Mac上似乎没有作用。当我尝试导入模块时,我收到一个ImportError,而我发现使其消失的唯一方法是在启动python之前将库目录添加到DYLD_LIBRARY_PATH中。我需要做些什么才能使这项工作?

关注者
0
被浏览
47
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    我终于想通了。解决方案包括两个部分。首先,setup.py需要使用extra_link_args来告诉链接器向编译后的模块添加正确的rpath:

    if platform.system() == 'Darwin':
        extra_link_args.append('-Wl,-rpath,'+lib_path)
    

    其中lib_path是安装库的目录。其次,要链接的所有库都 必须 具有以“ @ rpath /”开头的安装名称。例如,如果一个库名为“
    libFoo.dylib”,则其安装名称应为“ @ rpath / libFoo.dylib”。您可以使用“ install_name_tool
    -id”来更改库的安装名称。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看