天天看點

編譯zlib,解決_inflate_fast函數的問題

從zlib官網https://www.zlib.net/fossils/下載下傳最新版.

解壓縮後,在.\contrib\vstudio檔案夾下,找到相應VS對應版本的工程檔案,打開編譯.

使用預設的配置編譯為dll,項目中有部分代碼是彙編寫的,需要在項目屬性的連結器指令中輸入/SAFESEH:NO,關閉VC的記憶體溢出安全檢查,不然會出現一些錯誤.

編譯完dll後,在minizip或miniunz中測試很好用,但是由于項目的需要,需要使用靜态版的zip.lib.

在zlibvc項目屬性中,把"配置類型"由動态庫dll改為靜态庫lib,編譯很順利,不需要改其他東西.

編譯miniunz時,發現了一個比較頭疼的提示,

error LNK2019: 無法解析的外部符号 _inflate_fast,該符号在函數 [email protected] 中被引用

檢視inflate.c檔案确實有一處調用了inflate_fast函數,從函數的定義什麼沒看出什麼異常,沒辦法,隻能回到dll的狀态,跟進去調試,居然轉到inffas32.asm檔案中,看了看相關的引用,不知inflate_fast函數是咋給弄到這兒的?人外有人啊...

到此才明白,應該是在編譯為靜态庫的時候,并沒有把inffas32.asm檔案的obj連結進去.

回到lib狀态,找到inffas32.obj檔案,在miniunz工程屬性的連接配接器頁,把inffas32.obj加到附加依賴項中,注意路徑,不懂的話可以把inffas32.obj複制到ZlibDllDebug下,按照x86\ZlibDllDebug\inffas32.obj;輸入即可.同時也需要在指令行頁面中輸入/SAFESEH:NO 

然後編譯,順利通過.

繼續閱讀