Python runtime_library_dirs doesn't work on Mac

前端 未结 2 1910
梦如初夏
梦如初夏 2020-12-29 15:30

I have a Python extension module that needs to link against some dynamic libraries at runtime, so I need to tell it where to look for them. I\'m doing this by specifying ru

相关标签:
2条回答
  • 2020-12-29 15:49

    I finally figured this out. The solution has two parts. First, setup.py needs to use extra_link_args to tell the linker to add a correct rpath to the compiled module:

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

    where lib_path is the directory where the libraries are installed. Second, all of the libraries you're linking against must have install names that begin with "@rpath/". For example, if a library is called "libFoo.dylib", its install name should be "@rpath/libFoo.dylib". You can use "install_name_tool -id" to change the install name of a library.

    0 讨论(0)
  • 2020-12-29 15:59

    You can tell what libraries an extension links against with

    otool -L pyext.so
    

    I had a problem where an extension was linking to the wrong version of a library on my system. In that case I used install_name_tool to change the path to the library directly. For example,

    install_name_tool -change /wrong/libfoo.dylib /right/libfoo.dylib pyext.so
    
    0 讨论(0)
提交回复
热议问题