• 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

  • 相关阅读:
    VM虚拟机Linux和主机数据传输
    Linux CentOS 虚拟机下联网
    SQL 注入漏洞
    BurpSuite 各模块使用
    御剑指纹识别
    C#数组2(多维数组)
    C#数组1
    C#简单的枚举及结构
    ABAP性能1 | LOOP嵌套LOOP代码分析 (转)
    占位符使用(竖式计算)
  • 原文地址:https://www.cnblogs.com/csuftzzk/p/paths_in_mac_osx.html
Copyright © 2020-2023  润新知