我为这个问题而疯狂!

我遇到的错误之一是下一个:

Undefined symbols for architecture i386:
  "_zipOpen", referenced from:
      -[ZipArchive CreateZipFile2:] in ZipArchive.o


当我调用该方法时,代码的安全性(在这种情况下,我就使用Objective-C ++):

@implementation ZipArchive
...
-(BOOL) CreateZipFile2:(NSString*) zipFile
{
    _zipFile = zipOpen( (const char*)[zipFile UTF8String], 0 );
}


.h文件中

zipFile _zipFile;


在其他地方:

typedef voidp zipFile;


哪里

typedef void *voidp;


好的,我知道它可能不起作用。但是以前效果很好。事情随着我为单元测试添加的新目标而改变。

我将非常感谢您的帮助!

最佳答案

好吧,从错误

Undefined symbols for architecture i386:
  "_zipOpen", referenced from:
      -[ZipArchive CreateZipFile2:] in ZipArchive.o


我们可以知道zipOpen()函数的原型被声明为C函数(extern "C"),因为其名称没有被修饰。

因此,基本上有2个选项说明为什么会出现此错误:


zipOpen()实现根本没有与您的程序链接(忘记将文件/库添加到您的版本中,#ifdef退出等)。
出于某些原因,zipOpen()实现正在获得C ++,而不是C链接。也许您不小心将其放置在名称空间中,或者.cpp文件不包含带有函数的extern "C"声明的标头。


我们不能根据提供的信息说出来。

10-08 14:26