0

さて、私の問題を詳細に説明しようとします。アーカイブからゲーム リソースを読み取るために、SFML 用の ziploading API の使用を開始しました。必要なすべてのヘッダーとソース ファイルをプロジェクトの Codeblocks に配置したので、プロジェクトは次の要素で構成されます。

Source files for game
ZipLoader.h
ZipLoader.cpp
ioapi.h
unzip.h
zconf.h
zlib.h

したがって、アーカイブ内のリソースに基づいてゲーム メニューを描画しようとするゲーム メニュー ヘッダーには、次のようなものがあります。

    #include <SFML/Graphics.hpp>
    #include "Globals.h"
    #include "ZipLoader.h"

class GameMenu
{
    private:
    Zip::File file();

}

これは基本的に、メニューを宣言したgameMenu.cppでzipファイルをロードできるように、zipファイルを初期化しようとした場所です。ただし、次のような非常に奇妙なエラーが ZipLoader.cpp に表示されます。

src\ZipLoader.cpp|81|undefined reference to `unzOpen'|
src\ZipLoader.cpp|89|undefined reference to `unzLocateFile'|
src\ZipLoader.cpp|94|undefined reference to `unzOpenCurrentFile'|
src\ZipLoader.cpp|100|undefined reference to `unzGetCurrentFileInfo'|
src\ZipLoader.cpp|105|undefined reference to `unzReadCurrentFile'|
src\ZipLoader.cpp|109|undefined reference to `unzCloseCurrentFile'|
src\ZipLoader.cpp|110|undefined reference to `unzClose'|

しかし、それは不可能だと思います。ライブラリが見つからないと思いましたが、エラーが発生しているファイルにインポートしています。上記のすべてのメソッドは、unzip.hエラーが発生しているファイルにインポートされています。

#include "ZipLoader.h"
#include <SFML/System.hpp>
#include <iostream>
#include <fstream>
#include "unzip.h"

...
unzFile ZipHandle=unzOpen(DataFile); // error????

以下に示すように、unzip.h にはこれらの参照が非常によく存在します。

extern unzFile ZEXPORT unzOpen OF((const char *path));
extern unzFile ZEXPORT unzOpen2 OF((const char *path,
                                    zlib_filefunc_def* pzlib_filefunc_def));
    extern int ZEXPORT unzClose OF((unzFile file));

これは、C++ プログラムでこれまでに発生した中で最も奇妙なエラーです。ここにあるのに、どうして未定義になるのでしょうか? (私は Windows XP SP3 を使用しています)

4

3 に答える 3

1

zlib をライブラリ リストに追加するのを忘れていたと思います。

MSVC を使用している場合は、プロジェクト設定に移動し、リンカー設定を開き、zlib.lib (これは win32 の libz のファイル名だと思います) を追加の依存関係に追加します。

gcc を使用している場合は、コマンドラインに追加します-lzlib(またはそれでしたか?)。-lz

于 2012-09-27T06:06:34.543 に答える
1

関数をヘッダー ファイルで宣言しているため、コンパイル エラーは発生しません。問題は、リンク プロセスで、これらの関数の実装を含むライブラリを含めていないことです。

これらのファイルがどこにあるかを把握し、リンク プロセスに含める必要があります。

于 2012-09-27T06:07:51.973 に答える