【问题标题】:How do I use a C libary in my Objective-C iOS project?如何在我的 Objective-C iOS 项目中使用 C 库?
【发布时间】:2014-03-26 15:40:41
【问题描述】:

我正在为 iOS 编写一个程序,并希望在我的项目中使用 Apache Portable Runtime 和 Subversion C 库。

因为这是我第一次尝试这样做,所以我不知道从哪里开始。

我已经新建了一个C/C++库项目,导入项目中所有的apr.h和svn.h文件,设置sdk为iOS7

它编译得很好,它会输出一个 .a 文件,但是当我将它导入到我的项目中时,它没有得到链接或其他东西。

有人知道目标 c 的教程或 svn 库吗?或者至少为我指明正确的方向。

我在谷歌搜索时得到的唯一结果是:

“Objective-C 应该原生支持 C 库,这应该很容易”

我想这对我来说并不容易。 ;)

【问题讨论】:

  • 如果我是你,我会考虑改写我的问题。如果您的问题是在项目中包含 .a 文件,请询问“如何添加静态链接库?”或“如何将 .a 文件添加到我的 iOS 项目?”。
  • 谢谢,我改写了标题。
  • 您还需要在项目中包含源代码,而不仅仅是标题。

标签: ios objective-c c sdk static


【解决方案1】:

您可以通过以下方式进行故障排除:

  1. 点击您的蓝色项目图标。
  2. 在主视图中选择构建阶段选项卡。
  3. 展开“与库的链接”。

确保您的 .a 文件在此列表中。如果不添加。

如果您仍有问题,请检查您的构建日志(左窗格中最右侧的图标)。构建日志包含一长串您的编译器所做的事情。最右边的图标看起来像 5-6 行,彼此重叠。实际上,该图标是隐藏的,直到您将鼠标悬停在它上面。

单击此按钮将展开一个编译器步骤,并准确显示为您的编译器提供了哪些参数。这会很长,所以复制到编辑器可能很聪明。但它将包含开关,例如 -I 用于包含头文件,-L 用于库的位置等。在编译依赖它的代码期间检查您的 .a 文件是否实际上包含在内。我相信应该是 -l 开关。

【讨论】:

    【解决方案2】:

    如果你有C项目的源代码,你可以直接把所有的源代码放到你的项目中。 Xcode 知道如何编译 C 代码,它只会与您项目的其余部分一起编译。

    正如@Adam-Smith 所说,您可以在您的 Objective-C 代码中直接与 C 对象交互,而 C 对象将不会由 ARC

    管理

    【讨论】:

    • 不,这是错误的。 .mm 用于 C++ 而不是 C。Objective-C 是 C 的超集,与 C++ 不同,因此编译器无法区分 C 代码和 Objective-C 代码。是一样的。
    • @AdamSmith 据我了解,您不能在 Objective-C 中直接与 C 文件交互。因此,我通常在与 C 类交互时使用 C++。源代码在 C 中,但你需要在某个地方与它交互
    • 与 C 文件交互没有问题。不确定是谁传播了这种误解。您在野外发现的 C 代码与 Apple 在其 API 中使用的代码之间的唯一区别是它们使用 #import 而不是 #include。您可能必须将 .c 更改为 .m 才能使用 #import。使用 .mm 只会使事情复杂化,因为 C++ 并不是真正与 C 和 Objective-C 二进制兼容。
    • 那么内存管理是如何发挥作用的呢?如果您使用.mm,那么它会自动关闭ARC。如果您保留.m,那么您必须手动禁用该文件的ARC?
    • 完全没问题。 ARC 仅适用于 Objective-C 对象。它不影响 C 结构和原语,例如 int、float 等。它影响结构的唯一方法是您不能将指向 Objective-C 对象的指针粘贴到 ARC 下的结构中。无论如何,如果需要,您可以使用 .c 后缀。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多