Поэтому, пытаясь сжать файл размером 22 ГБ, все работает с файлами <2 ~ gb. Я получаю сообщение об ошибке: SZ_ERRROR_FAIL. </p>
Через несколько точек прерывания я получаю это от 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);
}
Iv добавил новое определениепосле прочтения после просмотра более исходного кода. _LZMA_SYSTEM_SIZE_T;
Кажется, он ничего не делает.
Есть ли #define, которого мне не хватает, чтобы заставить LZMA работать правильно? В лучшем случае документация скудная.