0

我正在尝试运行由其他人开发的 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)
4

1 回答 1

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 库(如果找到): http ://svn.netlabs.org/repos/gl2/opengl/glu/libtess/

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

于 2012-10-17T05:53:40.350 回答