Проблема LZMA c++ со сжатием больших файлов

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


person Steven Venham    schedule 23.10.2019    source источник
comment
какой вопрос?   -  person lenik    schedule 23.10.2019
comment
Добавить ссылку на реализацию LZMA? Думаю их несколько, может не у всех такая проблема.   -  person anatolyg    schedule 23.10.2019


Ответы (1)


Обычная ЛМЗА от 7z импл. НЕ поддерживает файлы > 4gb. Необходимо использовать ЛМЗА2.

person Steven Venham    schedule 03.11.2019