Windows764bit和VisualStudio2010下安装及使用Zlib
3).进入到zlib-1.2.5contrib\masmx86目录"zlib-1.2.5\contrib\masmx86",执行bld_ml32.bat。
4).这一步运行bld_ml32批处理文件,里面调用ml命令编译inffas32.asm和match686.asm,生成inffas32.obj和match686.obj。这两个文件在zlibvc中用到。
6).zlib的vssln解决方案文件可以在如下路径中找到"zlib-1.2.5\contrib\vstudio\vc10\zlibvc.sln"
在工具栏中将“解决方案平台”改为“x64”,编译即可
这个解决方案中包含6个工程。其中:
(1).zlibvc生成动态链接库zlibwapi.dll和对应的导入库zlibwapi.lib
注意:如果出现zlibvc.def(4):fatalerrorLNK1118:“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\zlib1.2.5"
库文件zlibwapi.dll,zlibwapi.lib,zlibstat.lib放到如下文件夹
"C:\MANUS\CommonSpace\zlib1.2.5\LibDebug"
2.通过加载静态链接库zlibstat.lib使用zlib
1).打开VisualStudio2010,建立一个Win32ConsoleApplication工程,假设名字是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),在ConfigurationProperties->C/C++->General->AdditionalIncludeDirectories中增加"C:\MANUS\CommonSpace\zlib1.2.5"。我们已经把头文件zconf.h,zlib.h放到这个文件夹中。
4).在ConfigurationProperties->C/C++->Preprocessor->PreprocessorDefinitions中增加"ASMV,ASMINF,ZLIB_WINAPI"。根据官方文档,1.2.5版本需要定义ZLIB_WINAPI。
6).在ConfigurationProperties->Linker->Input->AdditionalDependencies中增加"zlibstat.lib"。这个是静态链接库。
7).编译,生成exe文件。
3.通过加载动态链接库zlibwapi.lib使用zlib
1).同2-1)。
2).同2-2)。
3).同2-3)。
4).在ConfigurationProperties->C/C++->Preprocessor->PreprocessorDefinitions中增加"_CRT_NONSTDC_NO_DEPRECATE,_CRT_SECURE_NO_DEPRECATE,ZLIB_WINAPI"。根据官方文档,1.2.5版本需要定义ZLIB_WINAPI。
5).同2-5)。
6).在ConfigurationProperties->Linker->Input->AdditionalDependencies中增加"zlibwapi.lib"。这个是配合动态链接库"zlibwapi.dll"静态导出库。
4.测试
1).首先测试使用静态链接库的版本。将生成的test.exe文件复制到测试文件夹中。并新建一个test.txt文档,在里面输入大量字符。
2).通过cmd进入此测试文件夹。输入命令test.exetest.txt
3).观察压缩,解压结果。
4).然后测试使用动态链接库的版本。将生成的test.exe文件和zlibwapi.dll文件复制到同一测试文件夹中。并新建一个test.txt文档,在里面输入大量字符。
5).通过cmd进入此测试文件夹。输入命令test.exetest.txt
6).观察压缩,解压结果。
test.cpp代码如下
#include"stdafx.h"
#include
#include
#include
#include"zlib.h"
voidMyDoMinus64(LARGE_INTEGER*R,LARGE_INTEGERA,LARGE_INTEGERB)
{
R->HighPart=A.HighPart-B.HighPart;
if(A.LowPart>=B.LowPart)
R->LowPart=A.LowPart-B.LowPart;
else
R->HighPart--;
}
#ifdef_M_X64
unsigned__int64__rdtsc(void);
voidBeginCountRdtsc(LARGE_INTEGER*pbeginTime64)
//printf("rdtsc=%I64x\n",__rdtsc());
pbeginTime64->QuadPart=__rdtsc();
LARGE_INTEGERGetResRdtsc(LARGE_INTEGERbeginTime64,BOOLfComputeTimeQueryPerf)
LARGE_INTEGERLIres;
unsigned_int64res=__rdtsc()-((unsigned_int64)(beginTime64.QuadPart));
LIres.QuadPart=res;
returnLIres;
#else
#ifdef_M_IX86
voidmyGetRDTSC32(LARGE_INTEGER*pbeginTime64)
DWORDdwEdx,dwEax;
_asm
rdtsc
movdwEax,eax
movdwEdx,edx
pbeginTime64->LowPart=dwEax;
pbeginTime64->HighPart=dwEdx;
myGetRDTSC32(pbeginTime64);
LARGE_INTEGERLIres,endTime64;
myGetRDTSC32(&endTime64);
LIres.LowPart=LIres.HighPart=0;
MyDoMinus64(&LIres,endTime64,beginTime64);
LARGE_INTEGERlr;
lr.QuadPart=0;
returnlr;
#endif
voidBeginCountPerfCounter(LARGE_INTEGER*pbeginTime64,BOOLfComputeTimeQueryPerf)
if((!fComputeTimeQueryPerf)||(!QueryPerformanceCounter(pbeginTime64)))
pbeginTime64->LowPart=GetTickCount();
pbeginTime64->HighPart=0;
DWORDGetMsecSincePerfCounter(LARGE_INTEGERbeginTime64,BOOLfComputeTimeQueryPerf)
LARGE_INTEGERendTime64,ticksPerSecond,ticks;
DWORDLONGticksShifted,tickSecShifted;
DWORDdwLog=16+0;
DWORDdwRet;
if((!fComputeTimeQueryPerf)||(!QueryPerformanceCounter(&endTime64)))
dwRet=(GetTickCount()-beginTime64.LowPart)*1;
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;
returndwRet;
intReadFileMemory(constchar*filename,long*plFileSize,void**pFilePtr)
FILE*stream;
void*ptr;
intretVal=1;
stream=fopen(filename,"rb");
if(stream==NULL)
return0;
fseek(stream,0,SEEK_END);
*plFileSize=ftell(stream);
fseek(stream,0,SEEK_SET);
ptr=malloc((*plFileSize)+1);
if(ptr==NULL)
retVal=0;
if(fread(ptr,1,*plFileSize,stream)!=(*plFileSize))
fclose(stream);
*pFilePtr=ptr;
returnretVal;
intmain(intargc,char*argv[])
intBlockSizeCompress=0x8000;
intBlockSizeUncompress=0x8000;
intcprLevel=Z_DEFAULT_COMPRESSION;
longlFileSize;
unsignedchar*FilePtr;
longlBufferSizeCpr;
longlBufferSizeUncpr;
longlCompressedSize=0;
unsignedchar*CprPtr;
unsignedchar*UncprPtr;
longlSizeCpr,lSizeUncpr;
DWORDdwGetTick,dwMsecQP;
LARGE_INTEGERli_qp,li_rdtsc,dwResRdtsc;
printf("testzlib1.2.5usingdynamiclibrary.\n");
printf("ZhaoWang,June1st,2011.\n");
printf("pressanykeytostart.");;
getchar();
if(argc<=1)
printf("runTestZlib
if(ReadFileMemory(argv[1],&lFileSize,(void**)&FilePtr)==0)
printf("errorreading%s\n",argv[1]);
return1;
elseprintf("file%sread,%ubytes\n",argv[1],lFileSize);
if(argc>=3)
BlockSizeCompress=atol(argv[2]);
if(argc>=4)
BlockSizeUncompress=atol(argv[3]);
if(argc>=5)
cprLevel=(int)atol(argv[4]);
lBufferSizeCpr=lFileSize+(lFileSize/0x10)+0x200;
lBufferSizeUncpr=lBufferSizeCpr;
CprPtr=(unsignedchar*)malloc(lBufferSizeCpr+BlockSizeCompress);
BeginCountPerfCounter(&li_qp,TRUE);
dwGetTick=GetTickCount();
BeginCountRdtsc(&li_rdtsc);
z_streamzcpr;
intret=Z_OK;
longlOrigToDo=lFileSize;
longlOrigDone=0;
intstep=0;
memset(&zcpr,0,sizeof(z_stream));
deflateInit(&zcpr,cprLevel);
zcpr.next_in=FilePtr;
zcpr.next_out=CprPtr;
do
longall_read_before=zcpr.total_in;
zcpr.avail_in=min(lOrigToDo,BlockSizeCompress);
zcpr.avail_out=BlockSizeCompress;
ret=deflate(&zcpr,(zcpr.avail_in==lOrigToDo)Z_FINISH:Z_SYNC_FLUSH);
lOrigDone+=(zcpr.total_in-all_read_before);
lOrigToDo-=(zcpr.total_in-all_read_before);
step++;
}while(ret==Z_OK);
lSizeCpr=zcpr.total_out;
deflateEnd(&zcpr);
dwGetTick=GetTickCount()-dwGetTick;
dwMsecQP=GetMsecSincePerfCounter(li_qp,TRUE);
dwResRdtsc=GetResRdtsc(li_rdtsc,TRUE);
printf("totalcompresssize=%u,in%ustep\n",lSizeCpr,step);
printf("time=%umsec=%fsec\n",dwGetTick,dwGetTick/(double)1000.);
printf("defcprtimeQP=%umsec=%fsec\n",dwMsecQP,dwMsecQP/(double)1000.);
printf("defcprresultrdtsc=%I64x\n\n",dwResRdtsc.QuadPart);
CprPtr=(unsignedchar*)realloc(CprPtr,lSizeCpr);
UncprPtr=(unsignedchar*)malloc(lBufferSizeUncpr+BlockSizeUncompress);
longlOrigToDo=lSizeCpr;
inflateInit(&zcpr);
zcpr.next_in=CprPtr;
zcpr.next_out=UncprPtr;
zcpr.avail_in=min(lOrigToDo,BlockSizeUncompress);
zcpr.avail_out=BlockSizeUncompress;
ret=inflate(&zcpr,Z_SYNC_FLUSH);
lSizeUncpr=zcpr.total_out;
inflateEnd(&zcpr);
printf("totaluncompresssize=%u,in%ustep\n",lSizeUncpr,step);
printf("uncprtimeQP=%umsec=%fsec\n",dwMsecQP,dwMsecQP/(double)1000.);
printf("uncprresultrdtsc=%I64x\n\n",dwResRdtsc.QuadPart);
if(lSizeUncpr==lFileSize)
if(memcmp(FilePtr,UncprPtr,lFileSize)==0)
printf("compareok\n");
printf("pressanykeytoexittheprogram.");
go语言安装使用第三方库方式一般采用gogetgithub.com/.../...命令.例如:1gogetgithub.com/astaxie/beego1.错误情况一:1packagegithub.com/astaxie/beego:cannotdownload,$GOPATHnotset.Fo...
1.简介Memcached是一个高性能的分布式内存对象缓存系统。它通过将数据缓存在内存中来减少对数据库和文件系统的访问,减轻数据库及操作系统的负担,提高应用系统的速度。目前已经很多系统应用了memcached,其最新版本为memcached-1.4.5。随着硬件技术的不断提升,应用高性能服务器的场合越来越多,特别是64位系统。另外memcached是可跨平台的,这就需要我们经常会在32与64...
范培忠2017-06-22产品简介ApacheHTTPServer(简称Apache)是Apache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,由于其多平台和安全性[1]被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩展,将Perl/Python等解释器编译到服务器中。功能包括目录索引、目录别名、内容协商、可配置的H...
CentOS764bit下安装Nginx笔记范培忠2017-6-2322:51:00Nginx可以使用各平台的默认包来安装,本文是记录使用源码编译安装,包括具体的编译参数信息。编译环境gccg++开发库之类的需要提前装好。需要先装pcre,zlib,OpenSSL,pcre用于正则表达式,zlib为了网络传输压缩。wget下载的路径需提前自行查询,调整为最新版本。1....
标星★置顶公众号爱你们量化投资与机器学习编辑部独家编制本文由公众号量化投资与机器学习(ID:Lhtz_Jqxx)进行汉化翻译每年Python官方都会发布一次年度报告,如果你想了解Python的现状、趋势与未来,可以说没有比这份报告更有用的信息了。今年,来自全球150多个国家及地区的24000名Python...
IamalwayscuriousastowhytheJVMandCLRhaveastack-basedarchitectureWhydon'ttheyusearegister-basedapproachWhatbenefitsdoesithaveovertheregister-basedapproachIusedtopond...
IreallylikethesolarizedanduseitasthecolorschemeofmyiTermandVim.Butrecentlly,IstartusingNode.js.Theproblemhasbeenbotheringmeforweeks.Thecoloroftheresultofmochaand...
WhatIwantWhatIwanttodois,basedontheAccept-Languagesentbytheuser'sbrowser,totranslateboththein-codestrings(__('translatablestring'))andthefieldsIhaveconfiguredfromtable...
Ihopethetitleisn'tmisleading..Itwashardtocomeupwithapropernameforthis.Anyways,I'mtryingtoimplementtheQuadraticSievemethodforfactoringintegersinJavaforproblemsolvingp...
IamnewbietoRandihaveascenariotocountthelengthofaeverycharacterstringseparatedbycommainR.Ihaveafollowingdataframeinwhichithasacolumnvalues.Iwhattofindoutthele...