XCode 4.3:静态库生成

5

我已经查看了一些资料,但大多数答案都不完整或让我感到困惑。我收到了一个C库,需要在XCode 4.3中将其编译为静态库,然后在单独的iOS应用程序项目中使用,但我不确定如何继续进行。我不确定目录结构是否重要,但这是它的结构:

Library -> Section1 -> src -> .c files
                    -> sec1 -> .h files
                    -> sec1.h 
        -> Section2 -> src -> .c files
                    -> sec2 -> .h files
                    -> sec2.h

我一直在尝试使用这个链接中的内容来工作:http://blog.stormyprods.com/2008/11/using-static-libraries-with-iphone-sdk.html,虽然它与这个问题类似,但由于它是2008年的,所以它已经过时了,而且我也无法使它正常工作。还有这个问题:Including external C library with Xcode,但它没有详细说明如何生成库,然后再将其包含在另一个项目中。
如果有人能提供一个清晰和最新的答案,我和许多其他人肯定会非常感激。如果需要更多信息,请告诉我!
2个回答

7

构建静态库:

  1. 在Xcode中创建一个静态库项目
  2. 将所有的.c和.h文件添加到项目中
  3. 编译

使用这个库最简单的方法是将这个静态库项目添加到你的应用程序项目中。这样就不必担心创建“fat”库(即包含模拟器和设备代码的库)。

将静态库项目添加到你的应用程序项目中:

  1. 选择文件 > 添加文件到“...”
  2. 添加你的静态库的.xcodeproj
  3. 点击你的应用程序的.xcodeproj以显示构建选项
  4. 点击你的应用程序目标并选择“构建阶段”选项卡。
  5. 展开“链接二进制文件”部分
  6. 点击“+”按钮
  7. 展开“工作区”部分(你应该在那里看到你的库,一个.a文件)
  8. 点击你的库,你就可以开始了。

对于上面详细的步骤表示歉意,但是总有人会忘记执行步骤4-8,然后他们就会想为什么会出现链接错误!

Xcode将无法找到你库的头文件。你可以像添加其他头文件一样将公共头文件添加到你的项目中,或者在你的构建设置中设置“头文件搜索路径”。


1
谢谢你详细的回答!我遇到了大量错误,所以也许我错过了其他东西。我创建了一个iOS Cocoa Touch静态库,并添加了文件,在遇到头文件引用错误时进行了修复。我需要在任何地方更改编译语言为C吗?我想它不会自动知道,对吧? - Karoly S
1
Xcode(或clang)默认根据文件扩展名选择语言。例如,.c表示C语言,.cc表示C ++语言,.m表示ObjC语言,.mm表示ObjC ++语言。 - Arne
1
@GeneralMike 当您链接静态库时,只有被引用的目标文件会被拉入(除非您有意覆盖此行为)。因此,不会出现任何膨胀。添加所有.m或.c文件可能会耗费时间,并且它们将根据所添加到的项目的设置进行重新编译。静态库为您提供了编译代码的快照,具有特定的编译选项集。另一个真正的好处是,尽管Xcode正在变得更好,但似乎编译速度相当慢;当您处于修改-测试-修复-重新编译周期时,这是一个巨大的优势。 - idz
@GeneralMike 如果你正在使用预编译的静态库,那么你只需要将库文件(即 .a 文件)和头文件添加到你的项目中。添加头文件只是为了帮助 Xcode 找到它们。如果你不想添加头文件,你可以将 'Header Search Path' 设置为包含头文件所在的目录。希望这能帮到你。 - idz
@GeneralMike,该库必须包含您将要编译的所有架构。通常情况下,这些架构是i386、armv7和armv7s。就你上面提到的测试库而言,问题就出在这里。如果您尝试使用的预编译库没有您需要的所有架构,您将不得不联系供应商并请求一个新的库。 - idz
显示剩余8条评论

0
尝试使用在GitHub上看到的Universal Framework项目:https://github.com/kstenerud/iOS-Universal-Framework/。我已经广泛使用它,并且它很好用。您只需为该库创建一个新的XCode项目,放入所有源文件和头文件,它将构建一个静态框架。这可以在其他项目中使用,您也不必担心头文件搜索路径的问题。

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