如何解决“架构i386的未定义符号”

时间:2012-10-17 05:46:05

标签: iphone objective-c xcode

我正在尝试运行由其他人开发的Xcode项目,并且我不断收到以下错误。谷歌搜索它表明我缺少一些依赖,但如果是这样,我不知道哪一个。据推测,该项目已经配置了所有“Link Binary With Libraries”。我尝试了不同版本的Xcode和目标设备,我得到了同样的错误。如何进一步缩小问题范围?

Undefined symbols for architecture i386:
  "___gl_pqSortExtractMin", referenced from:
      ___gl_computeInterior in sweep.o
  "___gl_pqSortMinimum", referenced from:
      ___gl_computeInterior in sweep.o
  "___gl_pqSortNewPriorityQ", referenced from:
      _InitPriorityQ in sweep.o
  "___gl_pqSortInsert", referenced from:
      _InitPriorityQ in sweep.o
      _CheckForIntersect in sweep.o
  "___gl_pqSortInit", referenced from:
      _InitPriorityQ in sweep.o
  "___gl_pqSortDeletePriorityQ", referenced from:
      _InitPriorityQ in sweep.o
      _DonePriorityQ in sweep.o
      _CheckForIntersect in sweep.o
  "___gl_pqSortDelete", referenced from:
      _CheckForRightSplice in sweep.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

1 个答案:

答案 0 :(得分:1)

这意味着即使编译器具有头文件,当它实际链接它们时,它也没有找到该代码的真实实现。所以也许你没有链接你的静态库(只包括头文件),或者这个静态库还没有为i386架构编译。所以你不能让它在模拟器上工作。您应该查看lipo -info libMylib.a,了解它已编译的架构类型(armv6 - armv7 - armv7s,或其他任何东西)

好的,我发现了: 这是您正在使用的扫描文件。

http://oss.sgi.com/cgi-bin/cvsweb.cgi/projects/ogl-sample/main/gfx/lib/glu/libtess/sweep.c?annotate=1.2

内部

static int CheckForRightSplice( GLUtesselator *tess, ActiveRegion *regUp )

pqDelete( tess->pq, eUp->Org->pqHandle ); /* __gl_pqSortDelete */

顺便进入扫描中的包含文件有:

#include "priorityq.h"

所以它让你编译,因为你有函数的头定义,但你没有二进制实现。所以你得到链接器错误。 我不知道你是否需要在mac中安装openGl(虽然它已经包含在内),顺便说一句,我确定你没有(opengl / glu / libtess)libtess库,这就是“ priority.h“定义。

如果找到了以下是glu lib: http://svn.netlabs.org/repos/gl2/opengl/glu/libtess/

所以你应该问你的朋友他是否编写了自己的框架。也许你忘记在你的Xcode项目中添加一些链接,或者你的mac中缺少二进制文件,或者没有编译到i386中(即使我怀疑这一点)。顺便说一下,我真的不是一个openGl专家,但如果你问任何人进入openGl论坛,他们肯定可以帮助你。