首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以在另一个框架中包含一个框架吗?

我可以在另一个框架中包含一个框架吗?
EN

Stack Overflow用户
提问于 2010-08-18 20:26:29
回答 3查看 2.4K关注 0票数 8

我正在编写一个框架(称为Lighthouse.framework),它反过来使用来自另一个框架的代码(准确地说,是RegexKit.framework)。我已经将RegexKit.framework复制到自己的框架中,因此它具有如下结构:

代码语言:javascript
复制
Lighthouse.framework/
  Versions/
    A/
      Frameworks/
        RegexKit.framework
      Lighthouse

但是,当我试图运行一个使用Lighthouse.framework (我的框架)的应用程序时,我会得到以下错误:

未加载的库:@executable_path/../Frameworks/RegexKit.framework/Versions/A/RegexKit

参考来源: /Users/mdippery/Developer/Projects/Current/lighthouse/build/Debug/Lighthouse.framework/Versions/A/Lighthouse

原因:找不到图像

显然,加载程序没有找到RegexKit。

以下是加载程序希望加载的路径,礼貌otool

代码语言:javascript
复制
build/Debug/Lighthouse.framework/Versions/A/Lighthouse:
    /Users/mdippery/Library/Frameworks/Lighthouse.framework/Versions/A/Lighthouse (compatibility version 1.0.0, current version 1.0.0)
    /System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa (compatibility version 1.0.0, current version 12.0.0)
    @executable_path/../Frameworks/RegexKit.framework/Versions/A/RegexKit (compatibility version 0.4.0, current version 0.6.0)
    /usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.4)
    /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 227.0.0)
    /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 476.19.0)
    /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 677.26.0)

我可以在另一个框架中包含一个框架吗?这样做合适吗?我如何解决我的错误?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-08-20 12:53:30

我找到了解决这个问题的办法。我从斯布思的回答中吸收了一些想法,但解决方法更简单。我运行了这个脚本:

代码语言:javascript
复制
install_name_tool -change @executable_path/../Frameworks/RegexKit.framework/Versions/A/RegexKit @loader_path/Frameworks/RegexKit.framework/Versions/A/RegexKit "${TARGET_BUILD_DIR}/${PRODUCT_NAME}.framework/Versions/A/${PRODUCT_NAME}"

作为运行构建脚本阶段。

注意,在一般情况下,您必须将@executable_path/../更改为@loader_path/,一切都很好。

票数 1
EN

Stack Overflow用户

发布于 2010-08-19 00:54:24

最简单的方法是使用@rpath。您的配置应该如下所示:

  1. Set RegExKit.framework的安装目录到@rpath
  2. Set灯塔。框架的安装目录到@rpath
  3. Set灯塔。框架的运行路径搜索路径到RegExKit.framework复制到RegExKit.framework的框架子文件夹(为此使用自定义构建阶段)

最后,任何链接到Lighthouse.framework的应用程序都应该将运行路径搜索路径设置为@loader/../Frameworks

票数 8
EN

Stack Overflow用户

发布于 2010-08-18 20:34:51

可以,停那儿吧。

但是,您需要包含的框架来“知道”它构建时的安装位置;否则,正如您所看到的那样,dyld将无法在运行时找到它。

如果我没记错的话,XCode中的相关设置是“安装目录”和“框架安装名称”。后者可能不会影响您的使用,但您需要前者类似于:@executable_path/../Frameworks/Lighthouse.framework/Versions/A/Frameworks/RegexKit.framework/Versions/A/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3516373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档