rpath在库中的传播失败

phl*_*psy 6 macos mach-o rpath dyld

简短问题:LC_RPATH库中命令的rpath是否传递到后续(和间接)动态加载的库中?

更确切地说:我已libapi.dylib动态链接到libloader.dylib动态加载插件libplugin.dylib.我有:

$ otool -l lib/libapi.dylib
lib/libapi.dylib
        libapi.dylib
        /usr/lib/libSystem.B.dylib
        @rpath/libloader.dylib

$ otool -l lib/libloader.dylib
lib/libloader.dylib
        libloader.dylib
        /usr/lib/libSystem.B.dylib

$ otool -l lib/plugins/libplugin.dylib
lib/plugins/libplugin.dylib:
        libplugin.dylib
        /usr/lib/libSystem.B.dylib
        @rpath/libloader.dylib

$ otool -L lib/libapi.dylib | grep "LC_RPATH" -A2
        cmd LC_RPATH
      cmdsize 32
        path @loader_path/ (offset 12)
Run Code Online (Sandbox Code Playgroud)

既不定义rpath命令libloader.dylib也不libplugin.dylib定义.并且安装名称没有任何@ rpath /或其他路径,尽管load命令中的名称前缀为@rpath /.

客户端现在加载libapi.dylib哪个链接到哪个libloader.dylib.此库动态加载libplugin.dylib链接到的库libloader.dylib.

为什么不能libplugin.dylib加载?它退出,因为它找不到libloader.dylib- 虽然它必须已经加载.为什么rpath @ loader_path/libapi.dylib没有正确地传播libloader.dyliblibplugin.dylib?使用DYLD_PRINT_RPATHS环境变量,我可以看到,没有rpath的替代是为了试图加载libloader.dyliblibplugin.dylib.到底发生了什么事?