LZMA c++ 压缩大文件的问题
LZMA c++ problem with compression of large files
所以尝试压缩一个 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;
好像没什么作用
是否缺少让 LZMA 正常工作的#define?文档充其量是稀少的。
来自 7z impl 的普通 LMZA。不支持大于 4gb 的文件。
必须使用 LMZA2。
所以尝试压缩一个 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;
好像没什么作用
是否缺少让 LZMA 正常工作的#define?文档充其量是稀少的。
来自 7z impl 的普通 LMZA。不支持大于 4gb 的文件。 必须使用 LMZA2。