我正在使用zlib 1.2.11。當我使用偏移量大於有符號整數範圍的gzseek(2^32的一半)時;我得到bytes_read爲-1。有沒有辦法使用64位偏移量。當偏移量太大(大於signed int 2^32的範圍)時,gzseek(zlib)失敗?
這裏是gzseek64的定義中摘錄gzlib.c
if (state->mode == GZ_READ) {
n = GT_OFF(state->x.have) || (z_off64_t)state->x.have > offset ?(unsigned)offset : state->x.have;
state->x.have -= n;
state->x.next += n;
state->x.pos += n;
offset -= n;
}
這裏n是無符號整數,可容納只有32位......即使我的偏移爲64位如何保持該值....請糾正我,如果我錯了
更多發現: 聲明宏後Z_LARGE64 ... gzseek接受64位偏移量,但... 當我通過一個大的偏移seeked返回的字節是大的負價值,我認爲它與__int64做unsigned int類型轉換
關於什麼? Linux呢?視窗?蘋果系統?它是如何編譯的? –
我正在使用Windows。我知道有一些方法可以將gzseek調用鏈接到gzseek64,只有在32位DLL中才有這種方法?因爲當我嘗試構建zlib 1.2.11時,DLL中沒有gzseek64函數(或者依賴walker說)。 –
_LARGEFILE64_SOURCE已定義,但gzseek64仍未導出,我錯過了一些東西 –