2012-10-17 53 views
0

我想运行由其他人开发的Xcode项目,我不断收到以下错误。谷歌搜索表明,我错过了一些依赖,但如果是这样,我不知道哪一个。假设该项目已经配置了所有“Link Binary With Libraries”。我已经尝试过不同版本的Xcode和目标设备,并且出现同样的错误。我怎样才能进一步缩小问题的范围?如何解决“架构i386的未定义符号”

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

这意味着即使编译器有头文件,当它实际上链接它们时,也没有找到这个代码的真正实现。所以也许你没有链接你的静态库(只包含头文件),或者这个静态库还没有被编译为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”的定义。

这里是谷氨酸lib如果发现: http://svn.netlabs.org/repos/gl2/opengl/glu/libtess/

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

+0

编译命令的精简版本是这样的:/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/clang -arch i386 -filelist project.LinkFileList。 project.LinkFileList在这个目录中包含一堆.o文件:〜/ Library/Developer/Xcode/DerivedData /.../ Debug-iphonesimulator /.../ Objects-normal/i386 /。如果我在这些文件上运行“lipo -info”,我会为它们获得“非胖文件:filename.o是架构:i386”。 – Olbion

+0

mmm ...我认为你在错误的文件上做了lipo。你应该找到你要链接的特定的静态库:静态lib,你可以得到所有的gl_pqSortExtractMin,gl_pqSortInit;不是哭泣。它必须是一个libxxx.a数据文件。顺便说一下,首先尝试找到这个静态库的位置,然后检查Xcode是否正确链接了它。你可以在“BuildSetting-> Search Paths-> library search path”中查看它,你的静态库应该有一个链接路径。 –

+0

事情是我即使在没有添加任何静态库的情况下运行clang时也会出现此错误。另外,如果这个错误是由于缺少一个库,我怎么知道它是哪一个? – Olbion

相关问题