因此,尝试压缩 22gb 文件时,一切都适用于文件 <2~gb 我收到错误:SZ_ERRROR_FAIL。
有几个断点,我从 LzmaEnc.c:2946 得到这个,因为 'p->nowPos64' 显示的值为 4294958849
我知道的是32位无符号整数的最大值。我正在 x64 中编译,所以这应该是一个问题。
使用 LZMA 1.9
有件事告诉我,在这一切的某个地方,有一个 uint32 正在被使用。我必须找到并替换为 uint64。
实现自7Z SDK
实现示例:
int res = SZ_OK;
res = LzmaEncode(
(unsigned char*)&outBuf[LZMA_PROPS_SIZE + sizeof(DATASIZE)], &destLen,
(unsigned char*)&inBuf[0], inBuf.size(),
&props,
(unsigned char*)&outBuf[0], &propsSize,
props.writeEndMark,
&g_ProgressCallback, &SzAllocForLzma, &SzAllocForLzma);
}
在查看了更多源代码后,我添加了一个新的定义。 _LZMA_SYSTEM_SIZE_T;
它似乎没有做任何事情。
我是否缺少 #define 来让 LZMA 正常工作?文档充其量是稀疏的。
最佳答案
来自 7z impl 的普通 LMZA。不支持 > 4GB 的文件。 必须使用LMZA2。
关于c++ - LZMA C++ 大文件压缩问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58514791/