我使用python和zlib來壓縮緩衝區,並在C++程序中解壓縮它。zlib uncompress在Ubuntu 10.10 x64上返回-5(g ++ -m64)
如果我用g ++ -m32編譯程序,我可以解壓緩衝區。
如果我使用g ++ -m64(以及具有相同選項的鏈接)構建它,它將返回-5(Z_BUF_ERROR)。
我可以修復它嗎?我應該改變緩衝區的大小嗎?
我分配我的輸出緩衝區的確切大小,我應該對齊64位或什麼?
謝謝。
我使用python和zlib來壓縮緩衝區,並在C++程序中解壓縮它。zlib uncompress在Ubuntu 10.10 x64上返回-5(g ++ -m64)
如果我用g ++ -m32編譯程序,我可以解壓緩衝區。
如果我使用g ++ -m64(以及具有相同選項的鏈接)構建它,它將返回-5(Z_BUF_ERROR)。
我可以修復它嗎?我應該改變緩衝區的大小嗎?
我分配我的輸出緩衝區的確切大小,我應該對齊64位或什麼?
謝謝。
我最近碰到這種問題。當編譯爲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,這個解決方法是可以的。
我有同樣的問題。這是因爲我傳遞了一個int參數作爲解壓縮的第二個參數(destLen)。由於擴展到uLong(8字節而不是4),導致解壓縮函數內的值不正確。使用用於destLen參數的uLong變量參考解決了所有問題
很好的答案!完美的作品 - 我在這上面呆了幾天。 – 2015-05-27 14:37:42