Linking a static library to an iOS project in XCode 4
我有一个编译到静态库的项目(AQGridView),但我似乎无法将它添加到我的项目中。
将项目拖到我的项目中会创建一个工作区,如果我尝试从DerivedData目录链接libAQGridView.a文件,它就不会将其识别为库。我不知道我做错了什么。
这是AQGridView项目。有人特别知道如何在Xcode4项目中使用它吗?
- 两年后,你在29票上涨后投了我反对票?除此之外,你刚才说的话毫无意义。
- Xcode4中如何"添加现有框架"的可能副本?
- 无法比这里更好地解释:链接静态库
我这样做如下:
在静态库项目中拖动。如果您在Xcode中打开了静态库项目,现在就关闭它。
在项目导航器(要添加静态库的项目)中选择主项目,在编辑器的左侧列的标题目标下,选择主项目的目标并导航到"构建阶段"选项卡。
单击"+"作为"目标依赖项",然后从添加的静态库项目中添加库图标"目标依赖项"。
单击"+"将二进制文件与库链接,并添加文件夹"workspace"下的库图标。
如果静态库项目中的头是通过这种方式链接的,那么可能还需要为静态库项目的头输入头搜索路径。
如果在主项目的项目导航器中没有看到静态库项目嵌套在主项目下,则最可能的原因是静态库自己的Xcode项目仍然处于打开状态。退出Xcode并打开包含嵌套静态库项目的主项目,而不打开原始静态库项目本身,您应该看到它在主项目中显示为嵌套项目。
- 这似乎可以工作,但出于某种原因,库不会显示在目标依赖项下。它出现在带有库的链接二进制文件下,但不显示目标依赖项。我不明白为什么它不会出现。
- 愚蠢的问题,但是静态库项目的目标肯定是库吗?我看到您提到它编译到一个库,但是在静态库项目中,它有一个目标,即一个库吗?
- 结果是项目必须嵌套,这将修复显示的目标依赖项。
- 啊哈,很好知道——这是嵌套在项目导航器层次结构中项目低于主项目的意义上的吗?我没有意识到可以拖动一个没有自动嵌套的跨项目引用。
- 我的一个问题是,我从以下文章开始:stackoverflow.com/questions/6074576/static-library-in-xcode4,结果发现这不是我要找的,但有很好的信息。
- 在xcode 4.2中,我发现使用本文中概述的工作区工作效果并不理想:blog.kihonghames.com/2011/labs xcode静态库缺陷/‌&8203;…
- 奇怪的是,这在4.2中对我来说仍然是完美的。
- 如果静态库项目仍在Xcode中打开,则会导致静态库项目在>4.1中拖动后不显示为嵌套。我认为Xcode将这视为对内部一致性的威胁,因为同一个项目的变更可以同时发生在两个项目中。如果您得到"在拖入后不嵌套任何内容"的问题,只需退出Xcode,然后只重新打开应该显示嵌套静态库跨项目引用的项目。
- 我发现我必须(1)将库项目拖到主项目中,然后(2)关闭两个项目(即退出Xcode)。重新打开主项目,然后向我展示了目标依赖项下的库,并将二进制文件与以前丢失的库链接起来。
- 你能详细解释一下吗?您是在主项目中添加"标题搜索路径",还是在库项目中添加?如果是,您在此设置中输入的路径/值类型是什么?
- 必须链接到库的主项目,以及包含标题的文件夹的路径(或指向文件夹的路径,如果要选中递归框,则包含指向库的所有源的路径)。
- 您打算把静态库拖到哪里?我的项目中没有可接受拖动对象的面板…
- 不拖动静态库,而是在"项目导航器"窗格中将静态库Xcode项目的主蓝色项目图标或其查找器图标拖动到要添加它的Xcode项目的"项目导航器"窗格中的主蓝色项目图标上。
- 那么,如何导入类中的库头呢?
- 我添加到"链接二进制与库"中的*.a文件是红色的,这意味着什么?
- 对我来说,问题是我的静态库项目和我试图链接到的项目在同一个工作区中。每次将库项目拖到另一个项目中都会导致Xcode崩溃。
- 我遵循了这里的说明,它解决了我所有的问题:developer.apple.com/library/ios/technotes/iosstaticlibraries‌&误8203;/…,特别是在我的主项目中将其他链接器标志属性设置为-objc。
xcode菜单>视图>实用程序>文件检查器
选择静态库文件,然后在"标识和类型"中将"文件类型"设置为"mach-o对象代码"。
- 哇,真是个奇怪的解决方案,但完全适用于我。谢谢!我的用例是在构建时将一个.a静态库复制到Frameworks中,并针对它进行链接,在重新排列我的项目一点之后,它开始抛出"找不到映像"库错误。不用了,多亏了。
工作区应该可以让这变得更容易,但我不知道他们会这么做。我的方法是创建一个工作区,添加我的主项目,添加我的库项目。然后进入主项目的构建阶段,在"链接二进制与库"部分添加库,并添加库。这应该是所有必要的,至少这是我的阅读,但不是。我要做的是进入xcode首选项,然后进入源树窗格。添加一个指向静态库头的源树,然后返回到项目的构建设置,然后返回到头搜索路径键,然后在那里输入$foo,其中"foo"是您所称的源树。
这对我来说是可行的,尽管我不知道这是最好还是最简单的方法。
- 如果你有Xcode的最新版本,这绝对是你的选择。比挖掘项目内部和构建目录容易得多。
在finder中查找.a文件,并将其拖到项目中。
选择"复制项目到目标组的文件夹(如果需要)",然后将标题添加到项目中。
现在,Xcode4应该为您自动链接到该框架。
以下是库在您的项目中的外观:
- 我确实做了那件事,但它不把它认作图书馆。图标只是显示一个页面而不是库指示器。
- 当然不是。它不应该看起来像框架。这并不意味着它没有链接。
- 框架有黄色的图标,白色的图标看起来像罗马帝国建造的图书馆:)
- 我更新了我的答案,告诉你它应该是什么样子。
- 你能更新你答案中图片的链接吗?
遵循苹果的文档。
简言之:
将目标链接到库。
将-ObjC添加到目标构建设置下的"其他链接器标志"(OTHER_LDFLAGS)。
此外,我还需要将库添加到主项目的方案中,因为在目标的依赖项中该库是不可见的。
哈雷的回答对我很有用,只需要一个补充:
签入静态库项目的生成设置private(或public)headers文件夹路径值并复制它。
根据所使用的include指令,将复制的值添加到客户端项目生成设置头搜索路径或用户头搜索路径中