• Mac OSX中的@executable_path, @load_path和@rpath的理解(网摘)


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

    原文出处:【24K纯开源

    Note: this article is actually about the @executable_path@load_path and @rpath install paths used by the linker on Mac OS X; wiki titles can't include underscores, however, because they are ambiguous with spaces.

    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

  • 相关阅读:
    Sublime text 2 全平台破解总结
    wordpress get_header 函数学习
    <转> Sublime Text 2 使用心得
    sublime 打开命令窗口监控
    linux环境搭建
    [摘]不容错过的window8 metro UI风格的web资源
    Sublime Text 2报“Decode error output not utf8”错误的解决办法
    <转>My sublime text (Windows) cheat sheet
    JavaScript 语言基础知识点总结(思维导图)
    bootstrap学习资源
  • 原文地址:https://www.cnblogs.com/sz-leez/p/4864444.html
Copyright © 2020-2023  润新知