0

我对这个问题越来越疯狂!

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

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;

好的,我知道它可能不应该工作。但是之前效果很好。随着我为单元测试添加的新目标,事情发生了变化。

我将非常感谢您的帮助!

4

2 回答 2

1

好的,从错误

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

我们可以看出 zipOpen() 函数的原型被声明为 C 函数 ( extern "C"),因为它的名称没有被破坏。

因此,出现此错误的原因基本上有 2 个选项:

  • zipOpen() 实现根本没有与您的程序链接(忘记将文件/库添加到您的构建中,#ifdef'd out 等)
  • 出于某种原因,zipOpen() 实现正在获取 C++,而不是 C 链接。也许您不小心将它放在了命名空间中,或者 .cpp 文件没有包含extern "C"函数声明的标头。

根据提供的信息,我们不能说它是哪个。

于 2012-05-04T14:51:03.760 回答
0

检查头文件中的函数声明是否等于实现文件中的函数原型

于 2013-04-21T15:48:34.363 回答