没有为架构i386找到iOS符号

时间:2012-11-05 10:19:43

标签: iphone xcode frameworks static

我在完成http://www.icodeblog.com/2011/04/07/creating-static-libraries-for-ios/后制作了一个静态库。为了测试这个库我创建了一个新项目并将静态库拖到项目上并尝试测试它的一个方法。但它给了我错误“”_OBJC_CLASS _ $ _ MyLib“,引自:”。 MyLib是我创建的库的名称。

我创建静态库的步骤。 1.创建了一个新的Xcode项目。 2.选择创建cocoa touch静态库的选项。 3.在MyLib.h中编写了两个函数,并为fibonacci系列编写了一个实现,并为生成一个数字的阶乘编写了其他函数。 3.构建项目并单击MyLib.a文件,并在finder中显示部分。 4.将MyLib.a文件和MyLib.h拖放到名为MyLib的新文件夹中。

请帮助

3 个答案:

答案 0 :(得分:13)

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

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

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

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

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

同时检查目标的构建设置中是否“仅将构建活动体系结构”设置为NO。

如果由于没有源代码而无法重建依赖库,则必须在支持arm6或arm7体系结构的设备上进行测试。

答案 1 :(得分:2)

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

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

经过漫长的挣扎期后,我了解到要在cpp文件中导入c header,你需要这样做:

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

我的问题解决了。

答案 2 :(得分:1)

我遇到了完全相同的问题,当我在这个帖子上阅读答案时,终于能够在Xcode 4.5和iOS 6中使用它了。 @idz的答案效果很好但是你不得不在你的应用程序的项目中包含库项目然后将其设置为依赖项。

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

XCode 4.3: Static Library Generation