【问题标题】:XCode 4.3: Static Library GenerationXCode 4.3:静态库生成
【发布时间】:2012-07-24 06:00:56
【问题描述】:

我环顾四周,但我发现的大多数答案都是不完整的或感觉不完整,这让我有些困惑。我得到了一个 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 但它没有详细介绍实际生成库的细节,然后才包含在单独的项目中。

如果有人能提供清晰且最新的答案,我和其他许多人将非常感激,我敢肯定。如果需要更多信息,请告诉我!

【问题讨论】:

    标签: objective-c ios c xcode static-libraries


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      构建静态库:

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

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

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

      1. 选择文件 > 将文件添加到“”...
      2. 为您的静态库添加 .xcodeproj
      3. 在项目导航器中单击应用的 .xcodeproj 以显示构建选项
      4. 点击您应用的目标并选择“构建阶段”选项卡。
      5. 展开“与二进制文件的链接”部分
      6. 点击“+”按钮
      7. 展开“工作区”部分(您应该会在此处看到您的库、一个 .a 文件)
      8. 点击您的图书馆,您应该一切顺利。

      抱歉,上面的详细程度令人难以忍受,但不知何故,人们似乎总是忘记执行第 4-8 步,然后他们想知道为什么会出现链接错误!

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

      【讨论】:

      • 非常感谢您的详细回答!我遇到了大量错误,所以也许我错过了其他东西,我创建了一个 iOS Cocoa Touch 静态库,并添加了文件,修复了出现的标头引用错误,我是否需要将编译语言更改为 C任何地方?我在想它不只是知道,不是吗?
      • Xcode(或clang)默认根据文件扩展名选择语言。例如。 .c 代表 C,.cc 代表 C++,.m 代表 ObjC,.mm 代表 ObjC++。
      • @KarolyS 正如 Arne (+1) 所说,只要您的文件名以 .c 结尾,您就不需要做任何特别的事情,但这并不意味着您没有任何工作要做...这完全取决于原始代码是为哪个平台编写的。如果它是某种 UNIX 风格,它应该不会太糟糕,如果它是 Windows,它可能是一个更大的挑战。要寻找的一件事是#defines,代码可能期望确定平台(例如 POSIX)。
      • 好吧,我已经意识到,当我认为我正在修复我的标题错误时,我实际上正在让它变得更糟。我得到的错误是某些头文件导致“词法或预处理器问题, 文件未找到”我维护了库提供给我的结构,所以我不知道要做什么做。你有什么想法吗?
      • @GeneralMike 当您与静态库链接时,只会拉入引用的目标文件(除非您有意覆盖此行为)。所以,不,不应该有膨胀。添加所有 .m 或 .c 文件可能很耗时,并且将根据添加到的项目的设置重新编译它们。静态库为您提供已编译代码的快照,以及一组特定的编译选项。另一个真正的好处是 Xcode 虽然变得更好,但编译起来似乎很慢。当您处于修改-测试-修复-重新编译周期时,这是一个很大的好处。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-10
      相关资源
      最近更新 更多