1. 程式人生 > >Windows 7 64bit和Visual Studio 2010下安裝及使用Zlib

Windows 7 64bit和Visual Studio 2010下安裝及使用Zlib

本文主要介紹在Windows 7 64bit作業系統下,利用Visual Studio 2010,如何安裝,生成,並使用zlib 1.2.5。
(1). 首先,使用Visual Studio 2010編譯生成zlib 1.2.5版本的靜態和動態連結庫。
(2). 然後,通過載入靜態連結庫zlibstat.lib,實現對簡單txt文件的壓縮與解壓縮。
(3). 最後,通過呼叫動態連結庫zlibwapi.lib,實現對簡單txt文件的壓縮與解壓縮。

1. 使用Visual Studio 2010編譯生成zlib 1.2.5版本
   1). 從zlib官網 "http://zlib.net/"
       下載最新版本的zlib "http://zlib.net/zlib-1.2.5.tar.gz"
       解壓,展開到系統盤。
   2). 在編譯前,首先開啟VS2010的Command Prompt (32bit)

Windows <wbr>7 <wbr>64bit和Visual <wbr>Studio <wbr>2010下安裝及使用Zlib <wbr>1.2.5

   3). 進入到zlib-1.2.5contrib\masmx86目錄 "zlib-1.2.5\contrib\masmx86",執行bld_ml32.bat。

Windows <wbr>7 <wbr>64bit和Visual <wbr>Studio <wbr>2010下安裝及使用Zlib <wbr>1.2.5

   4). 這一步執行bld_ml32批處理檔案,裡面呼叫ml命令編譯inffas32.asm和match686.asm,生成inffas32.obj和match686.obj。這兩個檔案在zlibvc中用到。

Windows <wbr>7 <wbr>64bit和Visual <wbr>Studio <wbr>2010下安裝及使用Zlib <wbr>1.2.5
    5). 若是準備生成64位庫,則進入到zlib-1.2.5contrib\masmx64目錄 "zlib-1.2.5\contrib\masmx64",執行bld_ml64.bat。注意ml64.exe在vs2010的"Microsoft Visual Studio 10.0/VC/bin"下面找不到。我們需要使用"Microsoft Visual Studio 10.0/VC/bin/amd64/"下面的ml64.exe。這裡可以簡單將其複製到"Microsoft Visual Studio 10.0/VC/bin"下面。

       這一步執行bld_ml64批處理檔案,裡面呼叫ml命令編譯gvmat64.asm和inffasx64.asm,生成gvmat64.obj和inffasx64.obj。這兩個檔案在zlibvc中用到。Windows <wbr>7 <wbr>64bit和Visual <wbr>Studio <wbr>2010下安裝及使用Zlib <wbr>1.2.5


   6). zlib的vs sln解決方案檔案可以在如下路徑中找到 "zlib-1.2.5\contrib\vstudio\vc10\zlibvc.sln"

在工具欄中將“解決方案平臺”改為“x64”,編譯即可

       這個解決方案中包含6個工程。其中:

       (1). zlibvc生成動態連結庫zlibwapi.dll和對應的匯入庫zlibwapi.lib

注意:如果出現zlibvc.def(4): fatal error LNK1118: “VERSION語句中的語法錯誤,將VERSION刪除再編譯一次即可!

解決方法:開啟該專案的“屬性頁”對話方塊-->單擊“連結器”節點-->單擊“命令列”屬性頁-->/SAFESEH:NO 鍵入“附加選項”框中,然後點選應

       (2). zlibstat生成靜態連結庫zlibstat.lib

       (3). testzlibdll測試生成的動態連結庫zlibwapi.dll

       (4). testzlib測試生成的靜態連結庫zlibstat.lib        

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

       "zlib-1.2.5\contrib\vstudio\vc10\x86"

       為了隨後的除錯方便,在隨後的例子中,我們把標頭檔案zconf.h,zlib.h放到如下資料夾

       "C:\MANUS\CommonSpace\zlib 1.2.5" 

       庫檔案zlibwapi.dll,zlibwapi.lib,zlibstat.lib放到如下資料夾

       "C:\MANUS\CommonSpace\zlib 1.2.5\Lib Debug" 

Windows <wbr>7 <wbr>64bit和Visual <wbr>Studio <wbr>2010下安裝及使用Zlib <wbr>1.2.5


2. 通過載入靜態連結庫zlibstat.lib使用zlib

   1). 開啟Visual Studio 2010,建立一個Win32 Console Application工程,假設名字是test

   2). 開啟"zlib-1.2.5-2\contrib\testzlib\testzlib.c",開啟,將其內容複製到新建工程的test.cpp中。

       注意保留 #include "stdafx.h"

       將"if (ReadFileMemory(argv[1],&lFileSize,&FilePtr)==0)"改為

         "if (ReadFileMemory(argv[1],&lFileSize,(void**)&FilePtr)==0)"

   3). 開啟Project -> Property (Alt+F7),在Configuration Properties -> C/C++ -> General -> Additional Include Directories 中增加 "C:\MANUS\CommonSpace\zlib 1.2.5"。我們已經把標頭檔案zconf.h,zlib.h放到這個資料夾中。

Windows <wbr>7 <wbr>64bit和Visual <wbr>Studio <wbr>2010下安裝及使用Zlib <wbr>1.2.5

   4). 在Configuration Properties -> C/C++ -> Preprocessor -> Preprocessor Definitions 中增加 "ASMV, ASMINF, ZLIB_WINAPI"。根據官方文件,1.2.5版本需要定義ZLIB_WINAPI。

Windows <wbr>7 <wbr>64bit和Visual <wbr>Studio <wbr>2010下安裝及使用Zlib <wbr>1.2.5

   5). 在Configuration Properties -> Linker -> General -> Additional Include Directories 中增加 "C:\MANUS\CommonSpace\zlib 1.2.5\Lib Debug"。我們已經把庫檔案zlibwapi.dll,zlibwapi.lib,zlibstat.lib放到這個資料夾中。Windows <wbr>7 <wbr>64bit和Visual <wbr>Studio <wbr>2010下安裝及使用Zlib <wbr>1.2.5

   6). 在Configuration Properties -> Linker -> Input -> Additional Dependencies 中增加 "zlibstat.lib"。這個是靜態連結庫。

Windows <wbr>7 <wbr>64bit和Visual <wbr>Studio <wbr>2010下安裝及使用Zlib <wbr>1.2.5

   7). 編譯,生成exe檔案。

3. 通過載入動態連結庫zlibwapi.lib使用zlib

   1). 同2-1)。

   2). 同2-2)。

   3). 同2-3)。

   4). 在Configuration Properties -> C/C++ -> Preprocessor -> Preprocessor Definitions 中增加 "_CRT_NONSTDC_NO_DEPRECATE,_CRT_SECURE_NO_DEPRECATE,ZLIB_WINAPI"。根據官方文件,1.2.5版本需要定義ZLIB_WINAPI。

   5). 同2-5)。

   6). 在Configuration Properties -> Linker -> Input -> Additional Dependencies 中增加 "zlibwapi.lib"。這個是配合動態連結庫"zlibwapi.dll"靜態匯出庫 。 

   7). 編譯,生成exe檔案。

4. 測試

   1). 首先測試使用靜態連結庫的版本。將生成的test.exe檔案複製到測試資料夾中。並新建一個test.txt文件,在裡面輸入大量字元。

   2). 通過cmd進入此測試資料夾。輸入命令test.exe test.txt

   3). 觀察壓縮,解壓結果。

Windows <wbr>7 <wbr>64bit和Visual <wbr>Studio <wbr>2010下安裝及使用Zlib <wbr>1.2.5

   4). 然後測試使用動態連結庫的版本。將生成的test.exe檔案和zlibwapi.dll檔案複製到同一測試資料夾中。並新建一個test.txt文件,在裡面輸入大量字元。

   5). 通過cmd進入此測試資料夾。輸入命令test.exe test.txt

   6). 觀察壓縮,解壓結果。

Windows <wbr>7 <wbr>64bit和Visual <wbr>Studio <wbr>2010下安裝及使用Zlib <wbr>1.2.5
參考文獻

test.cpp程式碼如下

#include "stdafx.h"

#include <stdio.h>

#include <stdlib.h>

#include <windows.h>

#include "zlib.h"

void MyDoMinus64(LARGE_INTEGER *R,LARGE_INTEGER A,LARGE_INTEGER B)

{

R->HighPart = A.HighPart - B.HighPart;

if (A.LowPart >= B.LowPart)

R->LowPart = A.LowPart - B.LowPart;

else

{

R->LowPart = A.LowPart - B.LowPart;

R->HighPart --;

}

}

#ifdef _M_X64

// see http://msdn2.microsoft.com/library/twchhe95(en-us,vs.80).aspx for __rdtsc

unsigned __int64 __rdtsc(void);

void BeginCountRdtsc(LARGE_INTEGER * pbeginTime64)

{

// printf("rdtsc = %I64x\n",__rdtsc());

pbeginTime64->QuadPart=__rdtsc();

}

LARGE_INTEGER GetResRdtsc(LARGE_INTEGER beginTime64,BOOL fComputeTimeQueryPerf)

{

LARGE_INTEGER LIres;

unsigned _int64 res=__rdtsc()-((unsigned _int64)(beginTime64.QuadPart));

LIres.QuadPart=res;

// printf("rdtsc = %I64x\n",__rdtsc());

return LIres;

}

#else

#ifdef _M_IX86

void myGetRDTSC32(LARGE_INTEGER * pbeginTime64)

{

DWORD dwEdx,dwEax;

_asm

{

rdtsc

mov dwEax,eax

mov dwEdx,edx

}

pbeginTime64->LowPart=dwEax;

pbeginTime64->HighPart=dwEdx;

}

void BeginCountRdtsc(LARGE_INTEGER * pbeginTime64)

{

myGetRDTSC32(pbeginTime64);

}

LARGE_INTEGER GetResRdtsc(LARGE_INTEGER beginTime64,BOOL fComputeTimeQueryPerf)

{

LARGE_INTEGER LIres,endTime64;

myGetRDTSC32(&endTime64);

LIres.LowPart=LIres.HighPart=0;

MyDoMinus64(&LIres,endTime64,beginTime64);

return LIres;

}

#else

void myGetRDTSC32(LARGE_INTEGER * pbeginTime64)

{

}

void BeginCountRdtsc(LARGE_INTEGER * pbeginTime64)

{

}

LARGE_INTEGER GetResRdtsc(LARGE_INTEGER beginTime64,BOOL fComputeTimeQueryPerf)

{

LARGE_INTEGER lr;

lr.QuadPart=0;

return lr;

}

#endif

#endif

void BeginCountPerfCounter(LARGE_INTEGER * pbeginTime64,BOOL fComputeTimeQueryPerf)

{

if ((!fComputeTimeQueryPerf) || (!QueryPerformanceCounter(pbeginTime64)))

{

pbeginTime64->LowPart = GetTickCount();

pbeginTime64->HighPart = 0;

}

}

DWORD GetMsecSincePerfCounter(LARGE_INTEGER beginTime64,BOOL fComputeTimeQueryPerf)

{

LARGE_INTEGER endTime64,ticksPerSecond,ticks;

DWORDLONG ticksShifted,tickSecShifted;

DWORD dwLog=16+0;

DWORD dwRet;

if ((!fComputeTimeQueryPerf) || (!QueryPerformanceCounter(&endTime64)))

dwRet = (GetTickCount() - beginTime64.LowPart)*1;

else

{

MyDoMinus64(&ticks,endTime64,beginTime64);

QueryPerformanceFrequency(&ticksPerSecond);

{

ticksShifted = Int64ShrlMod32(*(DWORDLONG*)&ticks,dwLog);

tickSecShifted = Int64ShrlMod32(*(DWORDLONG*)&ticksPerSecond,dwLog);

}

dwRet = (DWORD)((((DWORD)ticksShifted)*1000)/(DWORD)(tickSecShifted));

dwRet *=1;

}

return dwRet;

}

int ReadFileMemory(const char* filename,long* plFileSize,void** pFilePtr)

{

FILE* stream;

void* ptr;

int retVal=1;

stream=fopen(filename, "rb");

if (stream==NULL)

return 0;

fseek(stream,0,SEEK_END);

*plFileSize=ftell(stream);

fseek(stream,0,SEEK_SET);

ptr=malloc((*plFileSize)+1);

if (ptr==NULL)

retVal=0;

else

{

if (fread(ptr, 1, *plFileSize,stream) != (*plFileSize))

retVal=0;

}

fclose(stream);

*pFilePtr=ptr;

return retVal;

}

int main(int argc, char *argv[])

{

int BlockSizeCompress=0x8000;

int BlockSizeUncompress=0x8000;

int cprLevel=Z_DEFAULT_COMPRESSION ;

long lFileSize;

unsigned char* FilePtr;

long lBufferSizeCpr;

long lBufferSizeUncpr;

long lCompressedSize=0;

unsigned char* CprPtr;

unsigned char* UncprPtr;

long lSizeCpr,lSizeUncpr;

DWORD dwGetTick,dwMsecQP;

LARGE_INTEGER li_qp,li_rdtsc,dwResRdtsc;

printf("test zlib 1.2.5 using dynamic library.\n");

printf("Zhao Wang, June 1st, 2011.\n");

printf("press any key to start.");;

getchar();

if (argc<=1)

{

printf("run TestZlib <File> [BlockSizeCompress] [BlockSizeUncompress] [compres. level]\n");

return 0;

}

if (ReadFileMemory(argv[1],&lFileSize,(void**)&FilePtr)==0)

{

printf("error reading %s\n",argv[1]);

return 1;

}

else printf("file %s read, %u bytes\n",argv[1],lFileSize);

if (argc>=3)

BlockSizeCompress=atol(argv[2]);

if (argc>=4)

BlockSizeUncompress=atol(argv[3]);

if (argc>=5)

相關推薦

Windows 7 64bitVisual Studio 2010安裝使用Zlib

本文主要介紹在Windows 7 64bit作業系統下,利用Visual Studio 2010,如何安裝,生成,並使用zlib 1.2.5。 (1). 首先,使用Visual Studio 2010編譯生成zlib 1.2.5版本的靜態和動態連結庫。 (2). 然後,通

ASP.NET 4 Visual Studio 2010 Web 開發概述

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ShowjQuery.aspx.cs" Inherits="ShowjQuery" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML

Visual Studio 2010開發VLC播放器環境搭建

今天很高興能夠寫一篇文章是關於windos下開發的,我從沒在windos下開發過專案,這次一個專案需要在windos下開發,我只好安裝VS,說實話在windos下開發效率真的偏低,真的不太習慣,安裝軟體

Visual Studio 2010編譯osipeXosip並搭建開發環境的方法

第一步,下載:到http://download.savannah.gnu.org/releases/osip/libosip2-3.6.0.tar.gz下載最新的osip庫並解壓。 到http://download.savannah.gnu.org/releases/exo

visual studio 2010 + win7 安裝失敗 解決方法

此前安裝了VS2013並且一直在用,最近收到一個客戶的部分原始碼+靜態庫(lib)需要自己編譯,由於客戶提供的靜態庫是在VS2010下編譯的,所以需要自己安裝VS2010。安裝自己下載的VS2010時出錯如下:[07/09/18,14:34:07] VC 9.0 Runtim

Windows 7, Visual Studio 2012編譯Webkit

解決方法 windows版本 同步 could 要求 windows 7 根目錄 vs2012 無法 因工作需要,需要編譯Windows版本的Webkit,中間走了不少彎路,都記錄下來,供大家參考!也隨時歡迎大家討論(QQ群:345802342) 整個編譯工作參考的是官

Windows 7+Visual Studio 2015Caffe安裝(CPU/非GPU)

由於專案組安排跟進深度學習、目標檢測,準備先嚐試一下MTCNN,其網路執行需要Caffe,暫時又只有Windows 7系統,因此先準備安裝caffe-windows。其次,考慮用筆記本GPU跑可能會炸,因此準備安裝CPU版的。 按照README.md進行安裝,首先看到要

Qt 5.9.2在Windows 10 64位Microsoft Visual Studio 2017安裝與配置

配置環境Windows 10 64位,Microsoft Visual Studio 2017,Qt 5.9.2下載安裝包1.Microsoft Visual Studio 2017線上安裝包連結:ht

visual studio 2012 配置OPENcv3.1 CMAKE問題總結

visual studio 2012 下配置OPENcv3.1 和CMAKE問題總結   作為一個CMAKE的新手,在搭建環境的時候確實廢了很多功夫,所以總結一下自己的過程,希望隊大家有所幫助。   在開始之前有幾點需要強調: 1. 首先一定要確

Visual studio 2017設定使用pyQt5應注意的幾個問題

1.外部工具“命令”中pyQ5和pyUic5的位置 或許是初安裝設定的緣故,兩個檔案均沒有在作者所說的安裝路徑下。為了找這兩個檔案這是大費周折。經過全盤搜尋,發現pyqt5designer.exe和pyuic5.exe是在此目錄下。 C:\Users\user(自己的

QT vs2010 之QT與Visual Studio 2010整合的例子

做GUI介面的設計時,目前已不再拘泥於VS的MFC框架,有很多開源的工具。本例以QT與VS2012的整合為例,演示環境搭建,後續將會用QT做VT的開發工作。 第一步,下載QT和QT與VS的外掛,在VS2010下以及結合VTK的情況,網路上經網友實驗後效果比較好的版本如下:

一、利用Visual Studio 2010建立第一個基於服務資料驅動的Silverlight應用程式

(1)、開啟VisualStudio 2010,新建一個Silverlight應用程式專案,如下圖:選擇Silverlight應用程式,如圖點選確定按鈕,選擇在新網站中承載Silverlight應用程式Visual Studio 2010為我們建立好的介面如下:(2)、接下來

Visual Studio 2010/2012/2013/2015上使用C#開發Android/IOS安裝操作步驟

官方學習文件:http://developer.xamarin.com/guides/android/getting_started/ 官方學習例子:http://developer.xamarin.com/samples/android/all/ Xamarin 配置手冊

執行STASM所需要的Visual Studio 2010OpenCV的配置方法

    STASM是一個實現face landmark的開源類庫,以ASM(Active Shape Model)為基礎進行了改進,在A comparative study of face landmarking techniques這篇關於face landmark的綜述

vs2010(visual studio 2010)除錯F5執行不除錯Ctrl+F5一閃而過的解決辦法

好久沒用自己的筆記本碼程式碼了,回來過年,無聊,來做英雄會的題,突然發現vs2010又出現了以前執行的時候一閃而過的問題,記得在辦公室也有人問過我解決這個問題,感覺這個問題對剛使用vs的人是經常遇到。 一、除錯F5一閃而過的解決辦法 首先需要明白的是,除錯(F5)是我們除錯

visual studio 2017用xamarin for android 做個簡單的註冊頁面,包含單選控制元件,多選控制元件拉選單控制元件

照著牛腩老師的視訊,自己做了個註冊頁面,實現了簡單的單選控制元件、多選控制元件、下拉選單控制元件的使用,由於日曆控制元件太醜,就不模仿了,下面就是reg.axml的佈局效果,後面是程式碼。 , <?xml version="1.0" encoding="utf-8"?

Visual Studio 2010 快捷鍵小技巧

這裡把我積累的所有Visual Studio 2005快捷鍵同大家分享,希望對大家能有所幫助。 經過我的多次試驗,VS 2005中的快捷鍵在VS 2008、2010中也是可以被識別的,只是VS 2008、2010定義了自己新的快捷鍵方式。這是必要的:對已有的快捷鍵進行改進,並保證已習慣使用VS 2005快捷

memcached學習筆記1(windows 7 64bit 環境安裝memcached)

windows 7 64bit 環境下安裝memcached       2、安裝到windows服務,開啟cmd命令列,進入memcached目錄,執行memcached -d install命令,安裝服務。      如果在沒有安裝過的情況下,出現"failed t

visual studio 2010環境WinPcap環境設定總結

 WinPcap是windows下的一個製作網路程式的開發工具,獨立於Tcp/Ip棧,能夠靈活方便的對資料鏈路層的底層包進行處理。萬事開頭難,對於WinPcap環境的搭建存在一些小小的問題,以下就是我遇到的一些情況,希望能夠幫助準備學習WinPcap的朋友們。   在學習經

Windows 安裝 Microsoft Visual Studio 2010

Windows 安裝 VS2010 我的電腦系統:Windows 10 x64位 我要安裝的Microsoft Visual Studio 是:VS2010 注意: VS2010 沒有專門的