编译器在 Windows 上找不到对zip_get_num_entries的引用

Compiler doesn't find reference to zip_get_num_entries on Windows

本文关键字:get num 引用 entries zip Windows 找不到 编译器      更新时间:2023-10-16

我想在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回购中搜索了两天前发布的版本(比网站上发布的版本更新了一点,后者已经发布了近一年)。我用CMake建造了它,它成功了!

"未定义引用"表示没有可用的函数定义/实现(与声明/原型相反)。您忘记链接库。由于您将MinGW与g++一起使用,它将在命令行中使用类似-lzip的内容,或者作为LDFLAGS的一部分。

你也有可能误解了一些东西——在这种情况下,符号名称可能会因定义而异。但最有可能的情况是您忘记了链接依赖项。

我终于成功地使用了zip_get_num_entries!我搜索了他们的网站,发现当他们发布网站上可用的库时,zip_get_num_files的实现是新的。因此,我在他们的Mercurial回购中搜索了两天前发布的版本(比网站上发布的版本更新了一点,后者已经发布了近一年)。我用CMake建造了它,它成功了!