1. 程式人生 > >vs2013編譯zlib1.2.8庫

vs2013編譯zlib1.2.8庫

一、zlib庫的編譯
    首先要下載這個庫,我下載的是zlib-1.2.8,下載完解壓出來即可。下邊就開始編譯吧。(包括動態庫和靜態庫兩種)

  1. 首先開啟VS2013的Command Prompt (32bit),也就是命令提示視窗。

  2. 進入到zlib-1.2.5/contrib/masmx86目錄,執行bld_ml32.bat。(同理,64位的電腦進入masmx64目錄,執行bld_ml64.bat)。這一步執行bld_ml32批處理檔案,裡面呼叫ml命令編譯inffas32.asm和match686.asm,生成inffas32.obj和match686.obj(生成在本目錄下)。這兩個檔案在zlibvc中用到。

  3. zlib的vs sln解決方案檔案可以在如下路徑中找到:zlib-1.2.5/contrib/vstudio/vc11/zlibvc.sln,開啟

   這個解決方案中包含6個工程。其中:
   (1). zlibvc生成動態連結庫zlibwapi.dll和對應的匯入庫zlibwapi.lib
   (2). zlibstat生成靜態連結庫zlibstat.lib
   (3). testzlibdll測試生成的動態連結庫zlibwapi.dll
   (4). testzlib測試生成的靜態連結庫zlibstat.lib        

   最後我們在debug模式下編譯整個解決方案。生成的dll和lib檔案可在相應的資料夾中找到。

   (*注)如果用vs命令列編譯提示"ml不是內部或外部命令"的話,說明你的ml.exe路徑不對,這個是安裝vs的時候預設的路徑,除非你修改過vs的安裝路徑。解決方案:

    a.去對應的Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin目錄下找到ml.exe

    b.獲取全域性搜尋ml.exe

    c.找到ml.exe後,複製到命令列要編譯的那個目錄(我的是\\zlib-1.2.8\contrib\masmx86),然後編輯就ok了,會在當前目錄生成inffas32.obj和match686.obj檔案


下邊介紹如何使用編譯好的動態或是靜態庫。(假設專案工程已經建立完畢)

這裡我們把靜態庫zlibstat.lib和動態庫(zlibwapi.dll/zlibwapi.lib)以及zlib.h/zlibconf.h檔案放在一個資料夾中。

1.編譯步驟

a.先用vs2015命令列執行下bld_ml32.bat批處理

b.將inffas32.obj和match686.obj複製到壓縮目錄

c.開啟zlib-1.2.8\contrib\vstudio\vc11\zlibvc.sln編譯即可

2.出現的問題和解決

1.error LNK2026: module unsafe for SAFESEH image

修改屬性/linker/高階/映像具有安全異常處理程式/ YES 改為 No

2.fatal error LNK1118: syntax error in ‘version’ statement

開啟zlibvc.def檔案VERSION 修改為1.28即可(原來是1.2.8)

下邊介紹如何使用編譯好的動態或是靜態庫。(假設專案工程已經建立完畢)

這裡我們把靜態庫zlibstat.lib和動態庫(zlibwapi.dll/zlibwapi.lib)以及zlib.h/zlibconf.h檔案放在一個資料夾中。

二、使用zlib靜態庫:zlibstat.lib

1. 包含標頭檔案
 屬性--C/C++--常規--附加包含目錄(新增包含.h檔案的目錄)
2. 定義巨集
    屬性--C/C++--前處理器--前處理器定義:新增 ZLIB_WINAPI ASMV ASMINF

3. 專案包含.lib檔案所在的目錄:
 屬性--連結器--常規--附加庫目錄
4. 專案包含.lib檔案
 屬性--連結器--輸入--附加依賴項(libstat.lib)

5. 專案程式碼中 #include "zlib.h"
編譯生成.exe即可使用。

三、使用動態庫 zlibwapi.lib
1. 包含標頭檔案
 屬性--C/C++--常規--附加包含目錄(新增包含.h的目錄)
2. 定義巨集
    屬性--C/C++--前處理器--前處理器定義:新增 ZLIB_WINAPI(一定要加,否則提示“無法解析外部命令”,媽的,這個卡了我一天,各種環境都配好了,反反覆覆就是編不過,坑死了)

3. 專案包含.lib檔案所在的目錄:
 屬性--連結器--常規--附加庫目錄
4. 專案包含.lib檔案
 屬性--連結器--輸入--附加依賴項(zlibwapi.lib)

5. 專案程式碼中 #include "zlib.h"
編譯生成.exe檔案需要.dll檔案支援(動態載入)


相關連結:http://www.07net01.com/2015/08/902638.html

http://www.360doc.com/content/13/0311/09/3972394_270725627.shtml