0

我想在我的 C++ 程序中使用 libzip 从 zip 存档中提取文件。因此,首先,我获取其中的文件数量,获取它们的名称并阅读它们。要获取文件数,我使用“zip_get_num_entries”。它的原型是:

zip_uint64_t zip_get_num_entries(struct zip *, int)

以及我使用此功能的方式:

int nbrEntries(0);
zip *archive = zip_open("myZip.zip", 0, 0);
nbrEntries = zip_get_num_entries(archive, 0);

当我编写这段代码时,Code::Blocks 建议我使用 zip_get_num_entries,所以标题没有问题。但是当我编译时,编译器(MinGW)告诉我:

undefined reference to `_imp__zip_get_num_entries'

所以我尝试了它已弃用的等价物 zip_get_num_files 并且它有效。我将使用 CMake 制作的项目 libzip.dll.a 包括在内。我有两个文件:libzip.dll 和 libzip.dll.a。

我确定这是一个库问题(请注意,我在 MacOS 上没有这个问题),但我不知道如何解决这个问题。谢谢!

编辑:我搜索了他们的网站并读到当他们发布网站上可用的库时,zip_get_num_files 的实现是新的。所以我在他们的 Mercurial repo 中搜索并找到了 2 天前发布的版本(比网站上发布的版本更新了一点,它有将近 1 年)。我用 CMake 构建了它,它成功了!

4

2 回答 2

0

"Undefined reference" means that there is no definition/implementation (as opposed to declaration/prototype) of the function available. You forgot to link the library. Since you use MinGW with g++, it will take something like -lzip on the command line or as parts of LDFLAGS.

There is a chance that you misconfigured something, too - in which case the symbol name may be different depending on a define. But the most likely case is that you forgot to link the dependency.

于 2013-02-22T11:50:57.970 回答
0

我终于成功使用了 zip_get_num_entries!我搜索了他们的网站,发现 zip_get_num_files 在他们发布网站上可用的库时是新的。所以我在他们的 Mercurial repo 中搜索并找到了 2 天前发布的版本(比网站上发布的版本要新一点,它有将近 1 年)。我用 CMake 构建了它,它成功了!

于 2013-02-22T12:33:51.363 回答