Xcode 3.1.1 和静态库

Posted

技术标签:

【中文标题】Xcode 3.1.1 和静态库【英文标题】:Xcode 3.1.1 and static libraries 【发布时间】:2010-09-10 10:05:01 【问题描述】:

我是一位经验丰富的 VS.NET 用户,正在尝试在 Xcode 3.1.1 上启动和运行。 这是我想要完成的任务:

我想要一个静态库(“Lib”)拥有自己的 xcodeproj 文件。我有一个可执行应用程序(“App”),它使用 Lib 来引用 Lib 的 xcodeproj 文件,以便对 Lib 的更改导致 App 重新链接。理想情况下,我希望能够在 App 的 Xcode 工作区中编辑 Lib 的源文件,这样我就不必一直忙于进行更改。

我从在线帮助中了解到,我可以简单地将静态库 xcodeproj 拖到我的应用程序的项目中,它会获得参考。我看到一旦我的静态库 xcodeproj 在我的应用程序项目中,我可以简单地将它拖到应用程序的目标上,它就知道应用程序依赖于 Lib。这似乎是正确的道路,但事情还没有按照我想要的方式进行。

这是我的问题:

    似乎只是让 App 依赖于 Lib 并不会导致 App 与 Lib 链接。看来我必须将 libLib.a 从 Lib 文件夹显式拖到 App 的“Link Binary With Libraries”构建阶段。在 VS.NET 中,只需将项目指定为解决方案依赖项即可将其添加到链接行。我只是想确保我没有遗漏任何东西。

    当我在 Xcode 中打开 App 并将 Lib.xcodeproj 拖入其中时,那里没有 Lib 的任何源文件。我只在“Lib.xcodeproj”文件夹下获得 libLib.a。在 VS.NET 中,我可以在此处编辑 Lib 的源文件并重新构建它,等等......但是在 Xcode 中使用这种方法,当我重新构建 App 时,对 Lib.cpp 的更改不会导致 Lib 重新构建。理想情况下,当我将 Lib.xcodeproj 拖到 App 中时,我会显示所有 Lib 的源文件和目标。有没有办法做到这一点?

提前感谢您的任何回复!

【问题讨论】:

【参考方案1】:

您是正确的,使目标 A 依赖于目标 B(无论是在同一项目内还是跨项目)不会导致目标 A 链接到目标 B。您需要明确指定它们;这是因为它们是独立的概念,并且您可能在希望彼此链接的目标之间存在依赖关系 - 例如,由目标 C 构建的命令行工具和用作目标 A 的构建过程的一部分。

另外,您是正确的,从项目 A 中引用项目 B 不会让您在项目 A 的窗口中看到项目 B 的源代码。那是因为 Xcode 没有与 Visual Studio 和 Eclipse 相同的“工作区”模型。您在上面提到了“包含项目 A 的工作区”的存在,但 Xcode 并没有这样的东西,只是一个窗口表示项目 A。

【讨论】:

嗨,克里斯,非常感谢简短而详细的回答。我很感激!【参考方案2】:

打开应用项目。右键单击应用程序目标并选择“获取信息”。然后转到“常规选项卡”并找到“直接依赖项”。单击 (+)(加号)按钮添加直接依赖项。 Lib.xcodeproj 应该出现在您的可能性列表中。从该列表中选择 Lib 目标。

这应该实现在构建 App 目标时必须构建(或重新构建)Lib 项目。

(现在编辑我自己的帖子。我意识到我对问题中的第 2 点只字未提。我实际上仍在考虑第 2 点。我不确定这是否可能。)

【讨论】:

【参考方案3】:

我也是Xcode 3.1的新手,刚刚玩过你提到的问题,发现你的第二个问题没有问题。无论您使用什么应用程序来编辑依赖库源代码,您的主项目都将重建依赖目标。我通过以下方式检查了它:

    通过记事本应用编辑了您的应用所依赖的库的源文件。 选中依赖库项目引用,鼠标右击,选择“Open With Finder”,然后选中想要的源文件并进行编辑。

一切正常。

【讨论】:

【参考方案4】:

我也是一个相当新的 Xcode 用户。我所知道的大部分内容都是从 James Bucanek 的 Xcode 书中学到的(ISBN 047175479x)。这是一本针对/使用 Xcode 2.2 编写的旧书,但我发现其中几乎所有内容今天仍然适用于我,我目前使用 Xcode 3.1

如果您有兴趣,您可能会找到便宜的二手副本。

【讨论】:

以上是关于Xcode 3.1.1 和静态库的主要内容,如果未能解决你的问题,请参考以下文章

Xcode生成静态库和bundle

重复符号:在静态库 B 中包含静态库 A,在 XCode 项目中也包含库 A 和 B

Xcode for iPhone 中静态库和动态库的区别

Xcode如何添加静态库?

使用 XCode 3 对 iPhone 静态库进行单元测试

如何在静态库项目中使用 XCode 性能工具?