【问题标题】:Xcode 5 issue with linking to framework within the same projectXcode 5 链接到同一项目中的框架的问题
【发布时间】:2013-11-26 12:52:29
【问题描述】:

我遇到了好几天都无法解决的框架链接问题。

这就是我正在做的事情:

  1. 在 Xcode 5.0.2 中,我创建了一个新的框架项目。我删除了与项目一起创建的默认目标、与它们关联的文件以及相关方案(因为我想创建自己的)。

  2. 我创建了一个新的框架目标,给它起一个名字,比如“Test1”,删除默认的头文件和实现文件,并添加一个新协议。我自己搭建,只是为了检查,一切顺利。

  3. 我创建了另一个框架目标,给它取另一个名字,比如“Test2”,删除默认的头文件和实现文件,并添加一个新的类。

  4. 从 Test2 构建设置,我链接到 Test1。我尝试构建,但它失败了:

    ld: framework not found Test1
    clang: error: linker command failed with exit code 1 (use -v to see invocation)
    

如果我不包含 Test1 框架,它会按预期成功构建(框架不包含在任何文件中,仅包含在构建设置中)。

尝试清理和重建,手动删除文件,从设置中删除框架、库和头文件路径,重新启动 Xcode(甚至是计算机)以及其他一些我不记得的东西,但无济于事。还尝试了其他 SO 答案的一些建议,但仍然没有运气。

如果有人知道发生了什么,我将不胜感激。

谢谢。

编辑:Here is a link to an archive with a test project created to demonstrate the above problem. 我已经将“Target 1”框架添加到 Target 2 的依赖项中。

【问题讨论】:

    标签: xcode macos cocoa frameworks


    【解决方案1】:

    您需要将 Target 2 设置为具有 Target 1 作为依赖项。为此,请打开 Target 2“Build Phases”窗格。旋转打开“目标依赖项”。点击“+”按钮添加依赖,当工作表出现时,选择“Target 1”。

    完成此操作后,每次构建目标 2 时,它都会确保目标 1 已构建并位于正确的链接位置。

    【讨论】:

    • 感谢您的回答。请问,除了将它链接到“Link Binary With Libraries”部分之外吗?其实有什么区别?
    • 向依赖项添加了“目标 1”,但没有任何改变。另请参阅上面的编辑。
    • 是的,除了链接它之外,您还需要将它添加到依赖项中。将其放入依赖项可确保在重新构建目标 2 并且目标 1 中的某些内容发生更改时重新构建它。如果您更改了 Target 1 中的私有标头但您忘记重新构建,然后您重新构建 Target 2,即使 Target 2 不知道私有标头,Target 1 也会重新构建,因为它自上次以来已更改你建造的。
    • 我赞成您的回答和评论很有帮助,但它并不能解决我的问题。
    【解决方案2】:

    好的,事实证明上述内容无关。很抱歉造成混乱(但正确设置依赖项仍然是个好主意)。

    Xcode 找不到框架的原因是您没有向其中添加任何代码。你只有一个标题。将 .m(或者可能是 .c 或 .cpp 或 .mm)文件添加到 Target1 后,它就会按预期工作!

    【讨论】:

    • 确实,在随机尝试的时候,我尝试添加一些不相关的类(标题和实现)并且它起作用了。作为一个 Obj-c 初学者,我仍在努力思考这背后的原因,但是,这似乎是个问题。谢谢!
    猜你喜欢
    • 2015-08-08
    • 1970-01-01
    • 2017-11-09
    • 1970-01-01
    • 1970-01-01
    • 2021-08-31
    • 2013-05-03
    • 2011-09-25
    • 2017-11-26
    相关资源
    最近更新 更多