我正在尝试运行由其他人开发的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)
答案 0 :(得分:1)
这意味着即使编译器具有头文件,当它实际链接它们时,它也没有找到该代码的真实实现。所以也许你没有链接你的静态库(只包括头文件),或者这个静态库还没有为i386架构编译。所以你不能让它在模拟器上工作。您应该查看lipo -info libMylib.a,了解它已编译的架构类型(armv6 - armv7 - armv7s,或其他任何东西)
好的,我发现了: 这是您正在使用的扫描文件。
内部
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论坛,他们肯定可以帮助你。