zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    springmvc log4j 配置
    intellij idea maven springmvc 环境搭建
    spring,property not found on type
    intellij idea maven 工程生成可执行的jar
    device eth0 does not seem to be present, delaying initialization
    macos ssh host配置及免密登陆
    centos7 搭建 docker 环境
    通过rest接口获取自增id (twitter snowflake算法)
    微信小程序开发体验
    gitbook 制作 beego 参考手册
  • 原文地址:https://www.cnblogs.com/csuftzzk/p/paths_in_mac_osx.html
Copyright © 2011-2022 走看看