Python runtime_library_dirs在Mac上不起作用
我有一个Python扩展模块,需要在运行时链接到一些动态库,所以我需要告诉它在哪里寻找它们。我通过在setup.py中指定runtime_library_dirs来做到这一点。这在Linux上工作正常,但在Mac上似乎没有作用。当我尝试导入模块时,我收到一个ImportError,而我发现使其消失的唯一方法是在启动python之前将库目录添加到DYLD_LIBRARY_PATH中。我需要做些什么才能使这项工作?
-
我终于想通了。解决方案包括两个部分。首先,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”来更改库的安装名称。