向一个项目添加静态库时出错

时间:2011-06-12 14:23:35

标签: iphone ios xcode4 static-libraries

我正在尝试使用this示例学习在我的Xcode项目中创建和使用静态库。但是我一直在犯这个错误:

ld: warning: ignoring file /Developer/MathTest/iCodeBlogsMathLibrary/libICodeMathUtils.a,    
missing required architecture i386 in file
Undefined symbols for architecture i386:
"_OBJC_CLASS_$_MathFunctions", referenced from:
  objc-class-ref in MathTestViewController.o
ld: symbol(s) not found for architecture i386
collect2: ld returned 1 exit status

我可能会缺少什么?

2 个答案:

答案 0 :(得分:5)

您似乎正在为模拟器构建,这与i386架构相对应,但您只是与iphone(arm)库链接。

要解决此问题,您应该为i386和arm编译库libICodeMathUtils.a。

在查看了您所遵循的教程之后:在项目中集成静态库的更好方法是定义依赖项。你可以看看这个S.O. Xcode 4的文章,Xcode 3的文章(问题本身给出了步骤)。

另一个选择是为i386(模拟器)和arm(设备)单独构建库,然后使用命令行工具lipo创建一个可以在MathTest项目中链接的胖库。检查man lipo以了解使用该工具的信息。

编辑:关于你的评论

  

我的静态库没有在Target Dependencies中显示!!

您是否已将静态库从包含的项目树拖到目标? Xcode 3的步骤如下:

  1. 将库项目添加为包含的项目;

  2. 在包含的项目中找到静态库并将其拖到主目标上,将其添加为链接框架;

  3. 最后,在目标信息窗格中,您可以添加依赖项。

  4. 如果将目标添加到项目Scheme中,Xcode4似乎能够自动计算出依赖关系。您可以执行以下操作:编辑方案 - >构建 - >然后从工作区添加目标。另请参阅此S.O. question

答案 1 :(得分:1)

就我而言,

  

>   找到“其他链接器标志”构建设置。将标志-ObjC添加到此构建设置的值(如果它尚不存在)   <<

https://developer.apple.com/library/ios/technotes/iOSStaticLibraries/Articles/configuration.html#//apple_ref/doc/uid/TP40012554-CH3-SW1