【问题标题】:iOS symbols not found for architecture i386未找到适用于 i386 架构的 iOS 符号
【发布时间】:2012-10-25 04:00:12
【问题描述】:

经过http://www.icodeblog.com/2011/04/07/creating-static-libraries-for-ios/之后,我做了一个静态库。为了测试这个库,我创建了一个新项目并将静态库拖到项目中并尝试测试它的一种方法。但它给了我错误““_OBJC_CLASS__$_MyLib”,引用自:”。 MyLib 是我创建的库的名称。

我在创建静态库时采取的步骤。 1.新建一个Xcode项目。 2. 选择创建可可触摸静态库的选项。 3. 在 MyLib.h 中编写了两个函数,并编写了一个用于斐波那契数列的实现,另一个用于生成数字的阶乘。 3. 构建项目并点击MyLib.a 文件并在finder 中显示要显示的部分。 4. 将 MyLib.a 文件和 MyLib.h 拖到一个名为 MyLib 的新文件夹中。

请帮忙

【问题讨论】:

  • 架构 i386 的未定义符号:“_OBJC_CLASS_$_MyLib”,引用自:LibTestViewController.o ld 中的 objc-class-ref:未找到架构 i386 的符号 clang:错误:链接器命令失败退出代码 1(使用 -v 查看调用)
  • 如何为 i386 架构构建它

标签: iphone xcode frameworks static


【解决方案1】:

在为 iOS 构建库、框架或应用程序时,XCode 只会为目标的构建设置中指定的体系结构编译目标代码。 XCode 也将只链接到具有内置指定架构的二进制文件。

在 XCode 中,如果您选择您的目标,您可以在构建设置选项卡下看到您的目标的架构。它将包含 arm6、arm7 和 i386 等值。

在 iOS 模拟器中运行代码时,您是在 i386 架构的桌面上运行代码。

在设备上运行时,二进制文件具有为该架构构建的“切片”。 如果二进制文件中不存在正确的架构“切片”,它将不会运行。

如果您在模拟器中运行 iOS 应用程序时遇到缺少 i386 架构的错误,您需要确保您的应用程序及其所有依赖库都是针对 i386 架构构建的。

还要检查目标的构建设置中的“仅构建活动架构”是否设置为 NO。

如果您因为没有源而无法重建依赖库,则必须在支持 arm6 或 arm7 架构的设备上进行测试。

【讨论】:

  • 我通过将构建活动架构设置为 NO 来重建代码,并再次尝试使用我之前构建的框架,但仍然给了我同样的错误。我再次通过在构建设置的有效架构中输入 i386 值以及 armv7、armv7s 来重建它,但仍然是徒劳的
  • @ashutosh Bhatt 我也尝试了上面的答案,但它不起作用,请指导我如何修复 i386 错误。
【解决方案2】:

我遇到了完全相同的问题,当我阅读此线程上的答案时,终于能够在 Xcode 4.5 和 iOS 6 中运行它。 @idz 的答案效果很好,但它并不理想,您必须将库的项目包含在应用程序的项目中,然后将其设置为依赖项。

步骤 1-8 非常简单明了。您还需要确保标题搜索路径项目设置准确。祝你好运!

XCode 4.3: Static Library Generation

【讨论】:

    【解决方案3】:

    当我尝试在 cpp 文件中添加 c 标头时遇到同样的问题,如下所示

    //in c++ header file
    #import "cHeader.h"
    

    经过长时间的挣扎,我了解到要在 cpp 文件中导入 c 头文件,您需要这样做:

    //in c++ header file
    extern "C"{
        #import "cHeader.h"
    }
    

    我的问题解决了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-13
      相关资源
      最近更新 更多