【发布时间】:2021-08-16 07:16:14
【问题描述】:
我正在寻找 Zip 库,而 libzippp 看起来正是我想要的,所以我正在尝试小型 POC 控制台应用程序。
这是第一个,它在 x86 中运行良好,但是当我尝试在 x64 中编译时,我得到“未解析的外部 readAsText”。
我使用 vcpkg 来获取库
vcpkg 安装 libzippp
vcpkg 安装 libzippp:x64-Windows
错误 LNK2019 未解析的外部符号“public: class std::basic_string
#include <iostream>
#include "libzippp\libzippp.h"
using namespace std;
using namespace libzippp;
int main()
{
ZipArchive zf("d:\\1zip\\Gender.zcd");
bool ok = zf.open(ZipArchive::ReadOnly);
vector<ZipEntry> entries = zf.getEntries();
ZipEntry ze;
for (int i = 0; i < entries.size(); i++)
{
ze = entries[i];
string name = ze.getName();
int size = ze.getSize();
std::cout << name << "=" << size << "\n";
string textData = ze.readAsText();
std::cout << "text " << textData << "\n";
}
}
【问题讨论】:
-
不是真的,有点太笼统了。不过,我还有另一个线索。上面的错误消息给出了它正在寻找的完整名称(我认为就是这样): ?readAsText@ZipEntry@libzippp@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V ?$allocator@D@2@@std@@W4State@ZipArchive@2@K@Z 并且该库将函数导出为 ?readAsText@ZipEntry@libzippp@@QEBA?AV?$basic_string@DU?$char_traits@D @std@@V?$allocator@D@2@@std@@W4State@ZipArchive@2@_K@Z 最后几个字符有一个字符不同:错误消息以@K@Z结尾,lib导出以@结尾_K@Z
-
您解决了这个问题吗?我在使用柯南包时遇到了同样的问题。
-
我解决了这个问题。该软件包在 32 位中运行良好,但在 64 位中不匹配。只是一时兴起,我尝试了一个控制台应用程序,它不打扰使用 libzippp 软件包。我只是包含了源代码,我在 D:\vcpkg\vcpkg-master\buildtrees\libzippp\src\32217e672c-26e2865e9c.clean\src 的 vcpkg 目录中找到的只有两个文件,libzippp.cpp/.h。我将它们复制到我的源目录,包含在项目中,编译它并且它工作。它引入了一些 vcpkg 依赖项,但没有引入 libzippp 包,因此我绕过了不匹配。
标签: visual-c++ unzip zipfile