0

私はこの問題に夢中になっています!

私が得るエラーの1つは次のものです:

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

そのメソッドを呼び出すときのコードの平和 (私はそれが重要な場合に備えてそこで object-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()関数のプロトタイプはextern "C"、名前が変更されていないため、C関数()として宣言されていることがわかります。

したがって、このエラーが発生する理由は基本的に2つあります。

  • zipOpen()実装は、プログラムに対してまったくリンクされていません(ビルドにファイル/ライブラリを追加するのを忘れた、#ifdefが削除されたなど)
  • zipOpen()実装は、何らかの理由でCリンケージではなくC++を取得しています。誤って名前空間内に配置したか、.cppファイルextern "C"に関数の宣言を含むヘッダーが含まれていない可能性があります。

提供された情報に基づいてどちらが正しいかはわかりません。

于 2012-05-04T14:51:03.760 に答える
0

ヘッダー ファイル内の関数宣言が実装ファイル内の関数プロトタイプと等しいかどうかを確認します

于 2013-04-21T15:48:34.363 に答える