win10下Visual Studio 2015,C++ x64编译zmq
PS.本人编译过程踩得坑,记录备忘
下载:(1)官网:http://zeromq.org/intro:get-the-software,有简明的编译方式,cmake的,这里不多赘述
(2)到GitHub下载,https://github.com/zeromq,本人下载时是4.1.x stable,在https://github.com/zeromq/zeromq4-1
准备:首先将下载的源码包解压,到任意目录,本人解压得到的根目录为E:\zeromq4-1-master\zeromq4-1-master
编译:
(1)在根目录下,有个builds文件夹,打开后再打开里面的msvc文件夹,里面有vs2008到vs2013的工程文件夹,鉴于本人使用的是vs2015,所以,选择打开vs2013的工程,双击libzmq.sln打开解决方 案,会提是需要修改配置文件,点击确定即可,修改好后会自动加载项目
(2)在菜单栏的目标平台选择x64,而在配置选项里面有6个选项,分为3大类,Dyn、Static、Ltcg,Dyn表示动态库,Static表示静态库,Ltcg则是一个比较陌生的选项,这个在微软的msdn文档里面有详细介绍:https://msdn.microsoft.com/en-us/library/xbf3tbeh.aspx。
--->简要说明:/LTCG,链接时代码生成,由于在链接时生成代码,可以全局地对所有obj进行优化. 一般用于release版的生成. 该选项与增连链接 (https://msdn.microsoft.com/zh-cn/library/4khtbfyf.aspx微软的msdn中有介绍,关于这个的详细说明,引用一篇园友的文章:http://www.cnblogs.com/Dahaka/archive/2011/08/01/2124256.html) 是冲突的.开启了链接时代码生成,即便在增连链接开启的情况下,仍然要进行完整链接.为了让Debug版本生成速度不变慢,请保持debug版本不使用链接时生成代码选项.并且也不要依赖带有/ltcg选项生成的库。其编译的结果为lib文件。<---
本人编译动态链接库,所以使用的DynRelease选项,然后在libzmq项目处点击右键,选择build(编译),此时开始编译,但是在中途就会报错,如下
Severity Code Description Project File Line Suppression State
Error LNK1181 cannot open input file 'libsodium.lib' libzmq E:\zeromq4-1-master\zeromq4-1-master\builds\msvc\vs2013\libzmq\LINK 1
提示无法代开libsodium.lib,这是一个是一个先进而且易用的加密库。主要用于加密、解密、签名和生成密码哈希等等。这是一个可移植的、跨编译器支持、可安装的,基于 NaCI 开发,提供一个兼容 API。此时双击错误可以看到指示的编译语句如下,在libsodium.import.props的30行开始
<Target Name="Linkage-libsodium-dynamic" AfterTargets="AfterBuild" Condition="'$(Linkage-libsodium)' == 'dynamic'">
<Copy Condition="$(Configuration.IndexOf('Debug')) != -1"
SourceFiles="$(ProjectDir)..\..\..\..\..\libsodium\bin\$(PlatformName)\Debug\$(PlatformToolset)\dynamic\libsodium.dll"
DestinationFiles="$(TargetDir)libsodium.dll"
SkipUnchangedFiles="true" />
<Copy Condition="$(Configuration.IndexOf('Debug')) != -1"
SourceFiles="$(ProjectDir)..\..\..\..\..\libsodium\bin\$(PlatformName)\Debug\$(PlatformToolset)\dynamic\libsodium.pdb"
DestinationFiles="$(TargetDir)libsodium.pdb"
SkipUnchangedFiles="true" />
<Copy Condition="$(Configuration.IndexOf('Release')) != -1"
SourceFiles="$(ProjectDir)..\..\..\..\..\libsodium\bin\$(PlatformName)\Release\$(PlatformToolset)\dynamic\libsodium.dll"
DestinationFiles="$(TargetDir)libsodium.dll"
SkipUnchangedFiles="true" />
</Target>
此处(ProjectDir)..\..\..\..\..\libsodium,其中的..\有五个,而props文件所在的目录为解决方案所有项目的根目录,此处编译工程为(ProjectDir)-libzmq,如图
其目录为E:\zeromq4-1-master\zeromq4-1-master\builds\msvc\vs2013\libzmq,那么..\返回父目录五次,则回到了E:\zeromq4-1-master(注意开头时的解压根目录)
(3)下载libsodium,直接到github下载即可https://github.com/jedisct1/libsodium,下载解压后,本人解压根目录为E:\libsodium-master,打开根目录下的E:\libsodium-master\builds\msvc的vs2015,双击libsodium.sln,configuration(配置)选择DynRelease,平台选择x64,然后编译即可,过程很快,因为没有其他的以来,所以编译过成不会有差错。在根目录会生成bin文件夹,编译的结果就在里面。至此,本人认为在libzmq项目将libsodium路径包含进去即可,但是如步骤(2)处的props文件的内容,这样做并不会成功。
正确的做法:将编译后的整个根文件夹libsodium-master拷贝到E:\zeromq4-1-master,并且改名为libsodium,此时的E:\zeromq4-1-master有两个文件夹,一个是libsodium(libsodium的根目录),一个为zeromq4-1-master(zmq的根目录),如图
此时,libsodium的编译结果就如props文件描述的一致,结果在 ..\..\..\..\..\libsodium 的 E:\zeromq4-1-master\libsodium\bin\x64\Release\v140\dynamic,对应的PlatformName为x64,PlatformToolset为v140,在下面的文件跟需要复制引用的内容一致,如图:
PS.如果不想链接这个依赖库的话,右键libzmq项目,打开properties(属性),在左侧菜单栏的Local Depandencies(本地依赖项)中选中libsodium,然后选择not link就可以了,如图:
(4)以上工作准备好了之后,再次进行第二步的编译,就可以顺利的完成了,结果如下
1>------ Build started: Project: libzmq, Configuration: ReleaseDLL x64 ------
1> ConfigurationType : DynamicLibrary
1> Configuration : ReleaseDLL
1> PlatformToolset : v140
1> TargetPath : E:\zeromq4-1-master\zeromq4-1-master\builds\msvc\vs2013\libzmq\..\..\..\..\bin\x64\Release\v140\dynamic\libzmq.dll
1> Option-openpgm :
1> Option-sodium : true
1> Option-gssapi :
1> Linkage-libsodium : dynamic
1> Creating library E:\zeromq4-1-master\zeromq4-1-master\builds\msvc\vs2013\libzmq\..\..\..\..\bin\x64\Release\v140\dynamic\libzmq.lib and object E:\zeromq4-1-master\zeromq4-1-master\builds\msvc\vs2013\libzmq\..\..\..\..\bin\x64\Release\v140\dynamic\libzmq.exp
1> libzmq.vcxproj -> E:\zeromq4-1-master\zeromq4-1-master\builds\msvc\vs2013\libzmq\..\..\..\..\bin\x64\Release\v140\dynamic\libzmq.dll
1> libzmq.vcxproj -> E:\zeromq4-1-master\zeromq4-1-master\builds\msvc\vs2013\libzmq\..\..\..\..\bin\x64\Release\v140\dynamic\libzmq.pdb (Full PDB)
1> Copying libsodium.dll -> E:\zeromq4-1-master\zeromq4-1-master\bin\x64\Release\v140\dynamic\libsodium.dll
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
在根目录下也会出现一个bin文件在,结果在E:\zeromq4-1-master\zeromq4-1-master\bin\x64\Release\v140\dynamic里面:
至此,编译完成,使用时需要include的头文件在E:\zeromq4-1-master\zeromq4-1-master\include里面,有zmq.h和zmq_utils.h
win10下Visual Studio 2015,C++ x64编译zmq的更多相关文章
- win10 下visual studio 2015 在调试模式下不能跟踪源文件
win10 下visual studio 2015 在调试模式下不能跟踪源文件,只要一调试就会关闭(隐藏)打开的文档,非常不方便.经过一番折腾,发现是配置的问题. 如果安装多个版本的VS,请删除对应版 ...
- win10下Visual Studio 2015,C++ x64编译zlib
前提安装了visual studio 2015 PS.几乎所有方式,x64的编译都会有点坑,鉴于网上的x86编译方式非常的多,所以不再累赘x86的编译方式 zlib下载源: 官网:http: ...
- 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文件,可能 ...
随机推荐
- 设计模式-状态模式(State Pattern)
本文由@呆代待殆原创,转载请注明出处:http://www.cnblogs.com/coffeeSS/ 状态模式简介 状态模式允许一个对象在其内部状态改变的时候改变它的行为,他的内部会存着好几种状态, ...
- [BZOJ1305][CQOI2009]跳舞(网络流)
1305: [CQOI2009]dance跳舞 Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 3944 Solved: 1692[Submit][St ...
- 【树形dp】Godfather
[POJ3107]Godfather Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 7212 Accepted: 253 ...
- [bzoj1006](HNOI2008)神奇的国度(弦图最小染色)【太难不会】
Description K国是一个热衷三角形的国度,连人的交往也只喜欢三角原则. 他们认为三角关系:即AB相互认识,BC相互认识,CA相互认识,是简洁高效的.为了巩固三角关系,K国禁止四边关系,五边关 ...
- 8VC Venture Cup 2016 - Final Round D. Preorder Test 二分 树形dp
Preorder Test 题目连接: http://www.codeforces.com/contest/627/problem/D Description For his computer sci ...
- atomic与nonatomic的区别
原子性(atomic):某操作具备整体性,也就是说,系统其他部分无法观察到其中间步骤所生成的临时结果,而只能看到操作前与操作后的结果,那么就称改操作就是“原子的”(atomic),或者说,该操作具备“ ...
- a标签点击后页面显示个false
最近遇到个问题,在html页面中使用a标签,在href属性中调用一个function,而function中返回的是return false.结果页面被跳转了,然后页面上显示一个false. 一看到这个 ...
- 判断UISrollview的滑动方向
很常用的一个功能,就记录下来了. -(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView { historyY = scrollVi ...
- 【mybatis】mybatis自定义动态字段查询,mybatis实现动态字段查询,如果某个条件为null,则不查询某个字段,否则就查询某个字段
mybatis实现动态字段查询,如果某个条件为null,则不查询某个字段,否则就查询某个字段 先看一下 怎么实现动态的自定义字段查询: 例如: 而field 就是数据表中的某一个字段 String f ...
- 【java】java获取对象属性类型、属性名称、属性值
java获取对象属性类型.属性名称.属性值 获取属性 修饰符:[在Field[]循环中使用] String modifier = Modifier.toString(fields[i].getModi ...