2011-02-17 24 views
1

我使用python和zlib來壓縮緩衝區,並在C++程序中解壓縮它。zlib uncompress在Ubuntu 10.10 x64上返回-5(g ++ -m64)

如果我用g ++ -m32編譯程序,我可以解壓緩衝區。

如果我使用g ++ -m64(以及具有相同選項的鏈接)構建它,它將返回-5(Z_BUF_ERROR)。

我可以修復它嗎?我應該改變緩衝區的大小嗎?

我分配我的輸出緩衝區的確切大小,我應該對齊64位或什麼?

謝謝。

回答

2

我最近碰到這種問題。當編譯爲32位(即使運行在64位系統上)時,我們的軟件運行良好,但是在編譯64位環境時使用uncompress()返回相同的Z_BUF_ERROR(使用-m64)

仔細檢查壓縮數據:通過軟件從壓縮文件中讀取,然後再次轉儲到文件中,然後進行比較,沒有區別。

所以我的結論是問題來自zlib本身。 Ubuntu 10.4版本庫似乎只提供zlib版本1.2.3。 zlib主頁提供版本1.2.5(有關更好的可移植性的一些註釋)。

希望它有幫助。

編輯:我們從使用uncompress()移到inflate(),它解決了我們對64位體系結構的問題。我們仍然不知道uncompress()是否適用於具有較新(> 1.2.3)版本的zlib的64位系統。但是如果使用zlib-1.2.3/64bits,這個解決方法是可以的。

1

我有同樣的問題。這是因爲我傳遞了一個int參數作爲解壓縮的第二個參數(destLen)。由於擴展到uLong(8字節而不是4),導致解壓縮函數內的值不正確。使用用於destLen參數的uLong變量參考解決了所有問題

+0

很好的答案!完美的作品 - 我在這上面呆了幾天。 – 2015-05-27 14:37:42