编译器在 Windows 上找不到对zip_get_num_entries的引用
Compiler doesn't find reference to zip_get_num_entries on Windows
我想在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建造了它,它成功了!
- Cpp-Tuple使用带有变量的get
- 通过 get-Method 访问变量在类外不起作用
- 为什么无论你输入什么,这"while(cin.get(str,3))"只运行一次?
- Boost.Asio/OpenSSL HTTPS GET certificate trouble
- C++中是否有任何函数等同于python中字典的get函数?
- 使用istringstearm和get行缓慢读取文件
- 如何将 c++ get 函数代码转换为 opencv 算法中使用的 python
- 使用 cin.get() 初始化字符数组
- std::variant<>::get() 不能使用 Apple LLVM 10.0 编译
- 编写 cin.get() 以接收字符数组时出现问题
- 作用域枚举和标准::get
- Visual Studio 2017 中的 cpprestapi 问题找不到 POST/GET 常量
- 在 C++/C 中使用 CURL 发出带有数据文件的 GET HTTP 请求
- 使用"push_back"作为带有"get"函数C++的向量
- 使用 cin.get 读取字符数组
- 如何使用 fstream 的 .get 字符串?
- std::get like (partial) template specialization
- 从 unique_ptr::get 发送指针作为指针引用进入函数
- addr2line get 行号始终返回 0
- unique_ptr<T>::get() 返回的指针在原始unique_ptr被销毁后不是 nullptr