忽略文件[path],文件中缺少所需的i386架构。

28

我对Xcode和iPhone开发比较新手,在开启一个新项目并添加*.h和*.a文件(来自某个设备供应商)后,出现了以下问题:

我收到了以下警告:

ld:警告:忽略文件 /Users/udi/Desktop/Xcode/Xcode Projects/Scosche/libmyTrekSDK_armv7.a,文件 /Users/udi/Desktop/Xcode/Xcode Projects/Scosche/libmyTrekSDK_armv7.a 中缺少所需的 i386 架构(2 个切片)

如果我忽略这个警告,并尝试在头文件中给定的类中进行实例化,则会出现以下错误:

ld:警告:忽略文件[路径/文件名.a],文件[路径/文件名.a]中缺少所需的i386架构(2个切片)

i386 架构下的未定义符号:

"_OBJC_CLASS_$_HRMonitor",引用自:

ViewController.o 中的 objc-class-ref

ld: 找不到 i386 架构下的符号

clang: 错误: 链接器命令失败,退出代码为 1(使用-v查看调用)

我已经检查了框架搜索路径(如许多其他帖子中所提到的),并且一切都很清楚。

更多信息:

  1. 我正在使用Xcode 4.6.1
  2. 这些文件当前位于项目的根文件夹中。
  3. 我正在使用单个视图应用程序模板。

非常感谢任何帮助

3个回答

52

这个警告意味着你正在尝试在模拟器(i386)上使用为设备(ARM)制作的库。

你可以使用以下终端命令创建通用库:

lipo -create lib_arm.a lib_i386.a -output lib_universal.a

关于lipo命令的更多信息在这里


1
我猜这些库需要同时存在于armv7和i386上,对吗? - Dani Pralea
2
出现了“无法打开输入文件:lib_arm.a(没有那个文件或目录)”的错误提示。您是否在特定的位置运行此命令? - shim
@shim,你应该切换到存放静态库(arm和i386)的目录,像这样: $ cd /libs/ $ lipo -create name_of_your_arm_lib.a name_of_your_386_lib.a -output lib_universal.a - Dmitry Zhukov
我的错..我试图在模拟器上运行而不是设备上。没有改变任何东西,只是在我的iPad上运行我的应用程序,一切都很好。 - Ans
1
我在我的应用程序中使用了BluetoothManager.framework,并且包含了两个.h文件。该应用程序在iPad上运行良好,但是当我尝试在模拟器上运行时,出现了i386错误。无法找到解决方法。 - Jorgen
显示剩余3条评论

8

将您的目标的“Build Settings> Build Active Architectures Only”更改为“否”

这与Dmitry Zhukov的答案相同,但是通过Xcode进行操作而不是绕过其后面。


4

如果你正在使用第三方代码,请注意一些SDK可能无法在模拟器上运行。当我在设备上运行项目时,我遇到的相同构建错误消失了。


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