win10下Visual Studio 2015,C++ x64编译zlib
前提安装了visual studio 2015 PS.几乎所有方式,x64的编译都会有点坑,鉴于网上的x86编译方式非常的多,所以不再累赘x86的编译方式
zlib下载源:
官网:http://zlib.net/
下载:http://zlib.net/zlib128.zip
方式一:命令方式
1、解压zlib128.zip,随便一个地方即可,本人解压在E:\zlib128\zlib-1.2.8,zlib-1.2.8为根目录
2、这个方式之下,首先需要将visual studio的VC目录就加入到系统的环境变量中,在system的Advanced system settings(高级系统设置),在Advanced(高级)最下方,点击Enviroment Variable(环境变量),System Variables(系统变量)的Path,添加对应的VC目录路径,(Visual Studio不分x86和x64,主要部分安装在Program Files(x86)中)本人的目录为C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC ,添加之后注销或者重启
3、打开开始菜单,选择Visual Studio 2015文件夹(Visual Studio之后就会有),选择VS2015 x64 Native Tools Command Prompt(VS2015 x64本地命令行工具),(此处注意,很多教程需要使用此工具到zlib-1.2.8的contrib/masmx64下面执行bld_ml64.bat生成inffasx64.obj之类的文件,然后拷贝到根目录,再执行虾米那的步骤,其实这些步骤是多余的),大家可以注意到zlib-1.2.8根目录下有一个文集爱你家为win32,这个就是编译的关键,打开里面有个文件为Makefile.msc,这个就是nmake需要用到的makefile。用editpad打开文件可以看到如下:
PS.之所以说其他教程的一些工作是多余的,是因为在文件中的如下内容会自动的寻找相关的asm(汇编语言源程序文件)以及.h,.c文件,生成对应的obj文件
gvmat64.obj: $(TOP)/contrib\masmx64\gvmat64.asm inffasx64.obj: $(TOP)/contrib\masmx64\inffasx64.asm inffas8664.obj: $(TOP)/contrib\masmx64\inffas8664.c $(TOP)/zutil.h $(TOP)/zlib.h $(TOP)/zconf.h \
$(TOP)/inftrees.h $(TOP)/inflate.h $(TOP)/inffast.h
接下来,看文件内容,在最开始的注释处就有编译的方式
# Usage:
# nmake -f win32/Makefile.msc (standard build)
# nmake -f win32/Makefile.msc LOC=-DFOO (nonstandard build)
# nmake -f win32/Makefile.msc LOC="-DASMV -DASMINF" \
# OBJA="inffas32.obj match686.obj" (use ASM code, x86)
# nmake -f win32/Makefile.msc AS=ml64 LOC="-DASMV -DASMINF -I." \
# OBJA="inffasx64.obj gvmat64.obj inffas8664.obj" (use ASM code, x64)
于是接下来,在命令行中输入e:跳转到e盘,输入cd E:\zlib128\zlib-1.2.8到根目录,输入nmake -f win32/Makefile.msc AS=ml64 LOC="-DASMV -DASMINF -I." OBJA="inffasx64.obj gvmat64.obj inffas8664.obj",程序就会跑起来,如图:
至此,已经编译完成,在根目录下会出现相关的结果文件zlib.lib,zlib1.dll,zlib.pdb等等。
注意,如果不添加系统环境变量,或者不把VC\bin\amd64\ml64.exe拷贝到根目录下的话,运行编译完makefile中的一些必须的32位的obj后就会报错停止如下
提示1:
inffas8664.c
lib -nologo -out:zlib.lib adler32.obj compress.obj crc32.obj deflate.obj gzclose.obj gzlib.obj gzread.obj gzwrite.obj infback.obj inflate.obj inftrees.obj inffast.obj trees.obj uncompr.obj zutil.obj inffasx64.obj gvmat64.obj inffas8664.obj
inffasx64.obj : fatal error LNK1112: 模块计算机类型“x64”与目标计算机类型“X86”冲突
NMAKE : fatal error U1077: “"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\lib.EXE"”: 返回代码“0x458”
Stop. 提示2:
ml64 -c -coff -Zi -DASMV -DASMINF -I. ./contrib/masmx64\inffasx64.asm
'ml64' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
NMAKE : fatal error U1077: “ml64”: 返回代码“0x1”
Stop.
方式二:使用visual studio ide进行编译
PS.此处有些教程包括x86编译,也会重复去执行类似到masmx64执行bld_ml64.bat的工作,然后拷贝到根目录后再打开visualstudio,其实这些也是不需要的工作,因为IDE的工作其实就是再背后悄悄的执行Makefile里面的编译链接工作,只不过不那么直观的展示给你看而已。
1、打开E:\zlib128\zlib-1.2.8\contrib\vstudio\vc11,双击zlibvc.sln,Visual Studio 2015就会将其打开,但是这个sln是用vs2012创建的,所以会弹窗提示,需要更新相关的文件配置如图,点击确定即可
2、接下来吧菜单栏中的输出平台选择位x64,右键点击zlibvc,在弹出菜单中点击build,就会开始报错如下
Severity Code Description Project File Line Suppression State
Error MSB3073 The command "cd ..\..\contrib\masmx64
bld_ml64.bat
:VCEnd" exited with code 9009. zlibvc C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets 123
这个错误的产生鞥是来自生成时间中的预生成事件,因为无法准确的通过路径找到bat文件执行
3、解决方法如下:右键点击zlibvc,在弹出菜单中选择Properties(属性),在弹出的属性对话框选择Build Event(生成事件),点击Pre-Build Event(预先生成事件),会看到Command Line(命令行)中有错误提示所示的命令行,在这里我们对其进行修改,点击命令旁边的下拉按钮,然后点击edit(编辑),把内容删掉,替换如下:(此处的内容可参照命令行方式)
E:
cd E:\zlib128\zlib-1.2.8\contrib\masmx64
bld_ml64.bat
注意此处就是执行生成inffasx64.obj和gvmat64.obj的工作,因为再IDE中没有去链接asm,就会以来预先时间执行脚本生成,看看bld_ml64.bat脚本内容就会明白,他们会在本目录下生成对应的lst文件和obj,其他的拷贝链接工作IDE会在背后完成,如下
ml64.exe /Flinffasx64 /c /Zi inffasx64.asm
ml64.exe /Flgvmat64 /c /Zi gvmat64.asm
添加号之后取人关闭,然后重新执行第二步进行编译,发现已经开始正常的编译了,但是后面又报了个错如下,只需要双击错误,就会自动打开一个.def文件,将Verson一行的1.2.8改为1.28,然后保存
Severity Code Description Project File Line Suppression State
Error LNK1118 syntax error in 'VERSION' statement zlibvc E:\zlib128\zlib-1.2.8\contrib\vstudio\vc11\zlibvc.def 4
重新执行第二部操作进行编译,此时就会提示成功的消息,如下
1>------ Build started: Project: zlibvc, Configuration: Debug x64 ------
1> Microsoft (R) Macro Assembler (x64) Version 14.00.24210.0
1> Copyright (C) Microsoft Corporation. All rights reserved.
1>
1> Assembling: inffasx64.asm
1> Assembling: gvmat64.asm
1> Microsoft (R) Macro Assembler (x64) Version 14.00.24210.0
1> Copyright (C) Microsoft Corporation. All rights reserved.
1>
1> Creating library x64\ZlibDllDebug\zlibwapi.lib and object x64\ZlibDllDebug\zlibwapi.exp
1> zlibvc.vcxproj -> E:\zlib128\zlib-1.2.8\contrib\vstudio\vc11\x64\ZlibDllDebug\zlibwapi.dll
1> zlibvc.vcxproj -> x64\ZlibDllDebug\zlibwapi.pdb (Full PDB)
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
在E:\zlib128\zlib-1.2.8\contrib\vstudio\vc11\x64\ZlibDllDebug目录下就会出现对应的输出文件,如图
至此,所有的编译工作完成,PS.x86的visual studio ide编译方式,不需要修改任何东西即可编译完成。
win10下Visual Studio 2015,C++ x64编译zlib的更多相关文章
- win10 下visual studio 2015 在调试模式下不能跟踪源文件
win10 下visual studio 2015 在调试模式下不能跟踪源文件,只要一调试就会关闭(隐藏)打开的文档,非常不方便.经过一番折腾,发现是配置的问题. 如果安装多个版本的VS,请删除对应版 ...
- win10下Visual Studio 2015,C++ x64编译zmq
PS.本人编译过程踩得坑,记录备忘 下载:(1)官网:http://zeromq.org/intro:get-the-software,有简明的编译方式,cmake的,这里不多赘述 (2)到GitHu ...
- Win 7 x64 + Visual Studio 2015为WinXP编译可执行程序
造冰箱的大熊猫@cnblogs 2019/9/5 本文承接<Win7下使用Visual Studio为WinXP编译可执行文件>一文. - 在64位Win7(开发机)上,编写基于C的Win ...
- win10 安装visual studio 2015遇到的坑
最近win7系统不知啥原因无法访问域中的网络文件,打算升级到win10体验一下.结果发现这一路有太多的坑.首先安装win10基本上算顺利,但是当进入系统后,菜单模式对于PC的鼠标来说,用起来感觉不顺手 ...
- win10下visual studio code安装及mingw C/C++编译器配置,launch.json和task.json文件的配置
快一年了,我竟然还有脸回来..... 过去一年,由于毕设.找工作的原因,发生太多变故,所以一直没更(最主要的原因还是毅力不够...),至于发生了什么事,以后想说的时候再更吧..依然是小白,下面说正事. ...
- Visual Studio 2015 自定义文件编译
自己编译好了 QT 5.6.0 Alpha 版本后,如何使用 VS2015 创建 QT 工程呢? 1.安装插件,安装失败!因为 VS2015 不再支持 ADDIN , 所以 QT-VS-ADDIN 只 ...
- win8.1安装开发工具 vs2015 Visual Studio 2015 Preview Downloads
1.首先全新安装win8.1 略 破解激活.... 2.安装Visual Studio 2015 Visual Studio 2015 是免费的,不存在破解版本, 如果安装过程中存在问题,建议先把本文 ...
- Visual Studio 2015下编译zmq项目下其他项目踩进的项目引用坑
PS.在之前的一篇文章中介绍了如何用Visual Studio 2015编译zmq,在编译同解决方案中除了libzmq之外的项目例如inproc_thr时会报错误,具如下: Severity Code ...
- [No0000AB]用Visual Studio 2015在 WIN10 64bit 上编译7-zip (32 bit)
1.7-ZIP简介 7-zip 是一款免费的压缩解压软件.ZIP格式的文件默认被苹果和微软支持,完全不需要额外安装其他软件就可以解压.但对于非US-ASCII编码的文件名和大于2GB的ZIP文件,可能 ...
随机推荐
- 最快的BT软件rtorrent Step by Step指南
原文地址:http://forum.ubuntu.org.cn/viewtopic.php?t=165069 rtorrent是linux下最快的bt下载软件,由于支持DHT网络,可以很好的于迅雷和B ...
- Oracle rac架构和原理
Oracle RAC Oracle Real Application Cluster (RAC,实时应用集群)用来在集群环境下实现多机共享数据库,以保证应用的高可用性:同时可以自动实现并行处理 ...
- .NET:CLR via C# The Interlocked Anything Pattern
Many people look at the Interlocked methods and wonder why Microsoft doesn't create a richer set of ...
- Kali Linux下安装配置ProFTPD实例
1.安装ProFTPD 在ftp://ftp.proftpd.org/下能够找到官方公布的各个ProFTPD版本号,本人使用ftp://ftp.proftpd.org/historic/source/ ...
- javascript级联菜单,数据从数据库中获取
1.html代码: <%@ page contentType="text/html; charset=gb2312" %> <%@ page import=&qu ...
- Myeclipse反编译插件(jad)的安装和使用
在开发过程中我们肯定会遇到这样的问题,当我们调试程序的时候,走到一个地方发现引用了一个第三方的东西,点进去一看,会出现一下的画面,没有源代码!!!! 这让人很头疼,今天给大家介绍一个Myeclipse ...
- 【BZOJ】【1968】【AHOI2005】COMMON 约数研究
数论 原谅我这么傻逼的题都不会做…… 或许写成数学公式的形式比较容易想到解法? $$ans=\sum_{i=1}^n \sum_{d|i} 1$$ ……是不是感觉很水呀……是吧……改成先枚举d再枚举 ...
- C语言:自定义一个查找字串的功能函数,类似于<string.h>中的strstr()
//自定义一个字符串字串查找标准库函数strstr() #include<stdio.h> #include<string.h> char* myStrstr(char *st ...
- 第六章 JVM垃圾收集器(2)
上一章记录了几种常见的垃圾收集器,见<第五章 JVM垃圾收集器(1)> 1.G1 说明: 从上图来看,G1与CMS相比,仅在最后的"筛选回收"部分不同(CMS是并发清除 ...
- SQL Server基础知识三十三问 (7-14)
8. 一般什么时候使用update_statistics命令? 答: 这个命令基本上是在很多数据被处理过了之后才使用的. 如果大量的删除, 修改, 或这大量的数据插入已经发生了, 那么index就需 ...