XCode4不能链接新编译的静态库(依赖)项目。

8
我在XCode4中有一个项目,其中包含一个依赖项目(恰好是Kal项目)。
当我在XCode内更新Kal项目后,运行父项目(顺便说一下,这两个项目在同一个工作区中),看起来XCode编译了修改后的Kal项目但没有链接到新编译的libKal.a文件。
我正在运行默认的父项目方案之一。从日志中可以看出,在运行时,它先构建依赖项目,然后再构建父项目。但是,我能让父项目使用我的更改的唯一方法是将libKal.a产品重新添加为要链接的库,在父构建目标的“链接二进制文件与库”部分下。
也许有以下线索: - 我正在使用LLVM, - 我启用了-all_load标志。

1
你可能遇到了这个问题:https://dev59.com/dG025IYBdhLWcg3wHSGn - CodeSmile
5个回答

0

检查你的方案。对于依赖库的应用程序,请确保每次都构建依赖项。我已经阅读了方案应该已经有这个更新,但有时候并没有。你可以在这里看到一个例子...

http://blog.carbonfive.com/2011/04/04/using-open-source-static-libraries-in-xcode-4/#configuring_the_projects_scheme

基本上,编辑应用程序的方案并单击左上角的“构建”项。您将看到作为该构建一部分运行的每个目标。如果您没有看到依赖项的目标,则可以添加它。然后确保您的应用程序最后列出,以便首先创建所有依赖项。


0
根据项目的设置方式不同,Xcode 不一定会重新链接依赖库。为了每次都能进行链接,您需要将该项目添加为目标依赖项,以便在构建阶段中链接到要链接库的目标。
比如说,您有一个名为 Test 的工作区和两个名为 TestApplication 和 TestLibrary 的项目。如果将它们作为单独的项目包含在工作区中,则可以将 TestLibrary.a 添加到 TestApplication 中的“链接二进制文件与库”部分作为库,但不能将其添加到“目标依赖项”部分。
现在,如果将 TestLibrary 移动为 TestAppliction 的子项目(只需将其拖入项目导航器中的项目中),则可以将 TestLibrary 添加为要链接的库和 TestApplication 的目标依赖项。将其添加为目标依赖项可确保 Xcode 将构建(如有必要)并链接该库。

抱歉,因为我已经有一段时间没有设置自己的项目了,所以我不记得当库未被链接时的确切情况是什么。我想它可能是因为它是一个单独的项目,Xcode 不会检查是否需要再次构建,而只是链接到先前的库。但我记得在我弄清楚之前的解决方法是简单地触摸需要构建的项目中的文件。我有一个名为 touchMe 的文件,如果库项目包含编译源,则会将其包含在内,在构建之前我会触摸它。如果将库项目移动到依赖项目中不是您的选择,您也可以尝试同样的方法来解决问题。

希望这能帮到您。


0
简化你的生活,使用cocoaPods。这里有一个好的tutorial。CocoaPods会自动创建一个工作区,其中包含你项目所需的所有库。我以前在使用库时遇到各种问题,现在我只使用Pods。

0

如果你尝试以下方法:

  • 清理
  • 重建

在这种情况下,通常对我有用...


0
我建议您为您的库和主项目使用单一的工作区。在主项目中添加库目标之前(以便在主目标之前编译库),并设置头文件搜索路径。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接