Итак, пытаясь сжать файл размером 22 ГБ, все работает с файлами ‹2 ~ ГБ, я получаю сообщение об ошибке: 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 работать правильно? Документация в лучшем случае скудная.