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

时间:2011-06-01 17:52:27

标签: objective-c xcode cocoa xcode4

我在XCode4中有一个带有依赖项目的项目(恰好是Kal项目)。

当我从XCode中更新Kal项目,然后运行父项目(这发生在同一工作区btw),它看起来像XCode编译修改后的Kal项目但没有链接到新编译的libKal.a文件。

我正在运行其中一个默认的父项目方案。从日志中我可以看出,在运行时,它会在构建父项目之前构建依赖项目。但是,我可以让父项目使用我的更改的唯一方法是,如果我将libKal.a产品重新添加为要链接的库,在父构建目标的“Link Binary with Libraries”部分下。

也许是线索:   - 我正在使用LLVM,   - 我有-all_load标志。

5 个答案:

答案 0 :(得分:0)

如果你尝试怎么办?

  • 清洁
  • 重建

在这种情况下,这通常适用于我......

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

我建议您为库和主项目使用单个工作区。在主项目方案中,在main之前添加库目标(在主目标之前编译库)和setup header搜索路径。

答案 3 :(得分:0)

简化您的生活并使用cocoaPods。这是一个很好的tutorial。 CocoaPods将自动创建一个工作区,其中包含项目所需的所有库。我曾经有各种各样的库存问题,现在我只使用Pods。

答案 4 :(得分:0)

根据您的项目设置方式,Xcode不一定会重新链接依赖库。为了使其每次都链接,您需要将项目作为目标依赖项添加到您希望链接库的目标的构建阶段。

假设您有一个名为Test的工作区,两个项目名称为TestApplication和TestLibrary。如果将它们作为单独的项目包含在工作空间中,您将能够将TestLibrary.a作为TestApplication目标的构建阶段的“Link Binary With Libraries”部分中的库添加到TestApplication,但是您将不会能够将其添加到“目标依赖关系”部分。

现在,如果您将TestLibrary移动为TestAppliction的子项目(只需将其拖动到项目导航器中的项目中),您就可以将TestLibrary添加为一个库,以链接AND作为目标依赖项TestApplication。将其添加为目标依赖关系可确保Xcode(如果需要)构建并链接库。

很抱歉,但是我已经有一段时间了,因为我认为这样就设置了我自己的项目,所以我不记得究竟是什么情况下库没有链接。我认为这是一个类似的事情,因为它是一个单独的项目,Xcode不会检查是否需要再次构建并且只是链接到以前的库。我确实记得,直到我弄清楚我的工作是简单地触摸需要构建的项目中的文件。我有一个名为touchMe的文件,如果在构建之前我将触摸的库项目,它作为编译源包含在内。您可以做同样的事情,看看是否也能解决您的问题,如果将库项目移动到依赖项目中则不适合您。

希望有所帮助。