• Mac OSX中的@executable_path, @load_path和@rpath的理解


    本文转载自:https://wincent.com/wiki/@executable_path,_@load_path_and_@rpath。个人觉得写的很不错,简洁明了。

    Absolute paths

    Useful for frameworks installed in shared locations. Example:

    • Install path: /Library/Frameworks/Foo.framework/Versions/A/Foo

    @executable_path

    Useful for frameworks embedded inside applications, because it allows you to specify the location of the framework relative to the application's executable:

    • Install path: @executable_path/../Frameworks/Foo.framework/Versions/A/Foo
    • Application location: /Applications/Foo.app
    • Executable path: /Applications/Foo.app/Contents/MacOS
    • Framework location: /Applications/Foo.app/Contents/Frameworks/Foo.framework
    • Linker puts all this together to figure out that the framework binary can be found at:/Applications/Foo.app/Contents/MacOS/../Frameworks/Foo.framework/Versions/A/Foo

    @loader_path

    Available from Mac OS X 10.4 Tiger onwards; useful for frameworks embedded inside plug-ins, because it allows you to specify the location of the framework relative to the plug-in's code (remember, plug-ins may not actually know where they are going to be installed, relative to the application, so knowing @executable_path doesn't help us in this case):

    • Install path: @loader_path/../Frameworks/Foo.framework/Versions/A/Foo
    • Application location: /Applications/Foo.app
    • Plug-in location: /Library/Application Support/Foo/Plug-Ins/Bar.bundle
    • Executable path: /Applications/Foo.app/Contents/MacOS
    • Loader path: /Library/Application Support/Foo/Plug-Ins/Bar.bundle/Contents/MacOS
    • Framework location: /Library/Application Support/Foo/Plug-Ins/Bar.bundle/Contents/Frameworks/Foo.framework
    • Linker puts all this together to figure out that the framework binary can be found at:/Library/Application Support/Foo/Plug-Ins/Bar.bundle/Contents/MacOS/../Frameworks/Foo.framework/Versions/A/Foo

    Note that if the "loader" is an application rather than a plug-in, the @loader_path ends up being equivalent to @executable_path.

    @rpath

    New in Mac OS X 10.5 Leopard is @rpath. Key points:

    • @rpath instructs the dynamic linker to search a list of paths in order to locate the framework
    • critically, this list is embedded in the loading application
    • this means that a single framework with @rpath/Foo.framework/Versions/A/Foo can be made to work in a number of different ways; that is, you are effectively no longer limited by the choice of specifying your "install path" using either @executable_path or @loader_path
    • the down side: you now have to pass additional linker flags when building the host application (eg. -rpath @executable_path/../Frameworks or/Library/Frameworks; note that specifying both will cause the dynamic linker to try looking in both locations)

    Sources

  • 相关阅读:
    Ubuntu开机等待5分钟的取消方法
    329. 矩阵中的最长递增路径
    关于c语言中NULL的数值是否可以被修改
    #pragam在c++(visual studio 2019)编译器中的使用
    当cpu占有率过高时-sleep(0)的妙用
    inline解析
    一、【pytest实战--Web测试】搭建环境
    用openssl aes256 api实现文件加解密-带例程,兼容openssl enc -aes-256-cbc命令
    kali openvas安装
    C++关于变量初始化的琐记
  • 原文地址:https://www.cnblogs.com/csuftzzk/p/paths_in_mac_osx.html
Copyright © 2020-2023  润新知