zeromq-4.1.2在windows下的编译
作者:朱金灿
来源:http://blog.csdn.net/clever101
zeromq是一个最近比较火的跨平台消息中间件,最近准备研究它,故下载它的源码编译了一下。我是使用VS2008编译的,下载下来在zeromq-4.1.2\builds\msvc\vs2008目录下找到相应的解决方案文件。编译过程中有几个注意事项:
1. 出现1>e:\test\zeromq-4.1.2\include\zmq.h(78): fatal error C1083: 无法打开包括文件:“stdint.h”: No such file or directory
解决办法是:新建一个stdint.h,代码如下:
/* stdint.h standard header */
#ifndef _STD_INT
#define _STD_INT #ifndef _STDINT
#define _STDINT
#ifndef RC_INVOKED
#include <yvals.h> /* NB: assumes
byte has 8 bits
long is 32 bits
pointer can convert to and from long long
long long is longest type
*/ _C_STD_BEGIN
/* TYPE DEFINITIONS */
typedef signed char int8_t;
typedef short int16_t;
typedef int int32_t; typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned int uint32_t; typedef signed char int_least8_t;
typedef short int_least16_t;
typedef int int_least32_t; typedef unsigned char uint_least8_t;
typedef unsigned short uint_least16_t;
typedef unsigned int uint_least32_t; typedef char int_fast8_t;
typedef int int_fast16_t;
typedef int int_fast32_t; typedef unsigned char uint_fast8_t;
typedef unsigned int uint_fast16_t;
typedef unsigned int uint_fast32_t; #ifndef _INTPTR_T_DEFINED
#define _INTPTR_T_DEFINED
#ifdef _WIN64
typedef __int64 intptr_t;
#else /* _WIN64 */
typedef _W64 int intptr_t;
#endif /* _WIN64 */
#endif /* _INTPTR_T_DEFINED */ #ifndef _UINTPTR_T_DEFINED
#define _UINTPTR_T_DEFINED
#ifdef _WIN64
typedef unsigned __int64 uintptr_t;
#else /* _WIN64 */
typedef _W64 unsigned int uintptr_t;
#endif /* _WIN64 */
#endif /* _UINTPTR_T_DEFINED */ typedef _Longlong int64_t;
typedef _ULonglong uint64_t; typedef _Longlong int_least64_t;
typedef _ULonglong uint_least64_t; typedef _Longlong int_fast64_t;
typedef _ULonglong uint_fast64_t; typedef _Longlong intmax_t;
typedef _ULonglong uintmax_t; /* LIMIT MACROS */
#define INT8_MIN (-0x7f - _C2)
#define INT16_MIN (-0x7fff - _C2)
#define INT32_MIN (-0x7fffffff - _C2) #define INT8_MAX 0x7f
#define INT16_MAX 0x7fff
#define INT32_MAX 0x7fffffff
#define UINT8_MAX 0xff
#define UINT16_MAX 0xffff
#define UINT32_MAX 0xffffffff #define INT_LEAST8_MIN (-0x7f - _C2)
#define INT_LEAST16_MIN (-0x7fff - _C2)
#define INT_LEAST32_MIN (-0x7fffffff - _C2) #define INT_LEAST8_MAX 0x7f
#define INT_LEAST16_MAX 0x7fff
#define INT_LEAST32_MAX 0x7fffffff
#define UINT_LEAST8_MAX 0xff
#define UINT_LEAST16_MAX 0xffff
#define UINT_LEAST32_MAX 0xffffffff #define INT_FAST8_MIN (-0x7f - _C2)
#define INT_FAST16_MIN (-0x7fff - _C2)
#define INT_FAST32_MIN (-0x7fffffff - _C2) #define INT_FAST8_MAX 0x7f
#define INT_FAST16_MAX 0x7fff
#define INT_FAST32_MAX 0x7fffffff
#define UINT_FAST8_MAX 0xff
#define UINT_FAST16_MAX 0xffff
#define UINT_FAST32_MAX 0xffffffff #if _INTPTR == 0 || _INTPTR == 1
#define INTPTR_MAX 0x7fffffff
#define INTPTR_MIN (-INTPTR_MAX - _C2)
#define UINTPTR_MAX 0xffffffff #else /* _INTPTR == 2 */
#define INTPTR_MIN (-_LLONG_MAX - _C2)
#define INTPTR_MAX _LLONG_MAX
#define UINTPTR_MAX _ULLONG_MAX
#endif /* _INTPTR */ #define INT8_C(x) (x)
#define INT16_C(x) (x)
#define INT32_C(x) ((x) + (INT32_MAX - INT32_MAX)) #define UINT8_C(x) (x)
#define UINT16_C(x) (x)
#define UINT32_C(x) ((x) + (UINT32_MAX - UINT32_MAX)) #ifdef _WIN64
#define PTRDIFF_MIN INT64_MIN
#define PTRDIFF_MAX INT64_MAX
#else /* _WIN64 */
#define PTRDIFF_MIN INT32_MIN
#define PTRDIFF_MAX INT32_MAX
#endif /* _WIN64 */ #define SIG_ATOMIC_MIN INT32_MIN
#define SIG_ATOMIC_MAX INT32_MAX #ifndef SIZE_MAX
#ifdef _WIN64
#define SIZE_MAX UINT64_MAX
#else /* _WIN64 */
#define SIZE_MAX UINT32_MAX
#endif /* _WIN64 */
#endif /* SIZE_MAX */ //#define WCHAR_MIN 0x0000
#define WCHAR_MAX 0xffff #define WINT_MIN 0x0000
#define WINT_MAX 0xffff #define INT64_MIN (-0x7fffffffffffffff - _C2)
#define INT64_MAX 0x7fffffffffffffff
#define UINT64_MAX 0xffffffffffffffffU #define INT_LEAST64_MIN (-0x7fffffffffffffff - _C2)
#define INT_LEAST64_MAX 0x7fffffffffffffff
#define UINT_LEAST64_MAX 0xffffffffffffffffU #define INT_FAST64_MIN (-0x7fffffffffffffff - _C2)
#define INT_FAST64_MAX 0x7fffffffffffffff
#define UINT_FAST64_MAX 0xffffffffffffffffU #define INTMAX_MIN (-0x7fffffffffffffff - _C2)
#define INTMAX_MAX 0x7fffffffffffffff
#define UINTMAX_MAX 0xffffffffffffffffU #define INT64_C(x) ((x) + (INT64_MAX - INT64_MAX))
#define UINT64_C(x) ((x) + (UINT64_MAX - UINT64_MAX))
#define INTMAX_C(x) INT64_C(x)
#define UINTMAX_C(x) UINT64_C(x)
_C_STD_END
#endif /* RC_INVOKED */
#endif /* _STDINT */ #if defined(_STD_USING)
using _CSTD int8_t; using _CSTD int16_t;
using _CSTD int32_t; using _CSTD int64_t; using _CSTD uint8_t; using _CSTD uint16_t;
using _CSTD uint32_t; using _CSTD uint64_t; using _CSTD int_least8_t; using _CSTD int_least16_t;
using _CSTD int_least32_t; using _CSTD int_least64_t;
using _CSTD uint_least8_t; using _CSTD uint_least16_t;
using _CSTD uint_least32_t; using _CSTD uint_least64_t; using _CSTD intmax_t; using _CSTD uintmax_t; using _CSTD uintptr_t;
using _CSTD intptr_t; using _CSTD int_fast8_t; using _CSTD int_fast16_t;
using _CSTD int_fast32_t; using _CSTD int_fast64_t;
using _CSTD uint_fast8_t; using _CSTD uint_fast16_t;
using _CSTD uint_fast32_t; using _CSTD uint_fast64_t;
#endif /* defined(_STD_USING) */
#endif /* defined _STD_INT */
然后把它放到\zeromq-4.1.2\include目录下,然后在\zeromq-4.1.2\include\zmq.h将
# include <stdint.h>改为# include "stdint.h",这样做是为了从本地目录开始查找头文件。
2. 1>e:\test\zeromq-4.1.2\include\stdint.h(17): error C2371: “int8_t”: 重定义;不同的基类型
1> e: \test\zeromq-4.1.2\src\stdint.hpp(42): 参见“int8_t”的声明
解决办法:将\zeromq-4.1.2\src\stdint.hpp下的
#ifndef int8_t
typedef __int8 int8_t;
#endif
#ifndef int16_t
typedef __int16 int16_t;
#endif
改为
//#ifndef int8_t
//typedef __int8 int8_t;
//#endif
//#ifndef int16_t
//typedef __int16 int16_t;
//#endif
(就是全部注释掉)
3.编译出现1>session_base.obj : errorLNK2019: 无法解析的外部符号 "public: __thiscallzmq::socks_connecter_t::socks_connecter_t(class zmq::io_thread_t *,classzmq::session_base_t *,struct zmq::options_t const &,struct zmq::address_t*,struct zmq::address_t *,bool)"(??0socks_connecter_t@zmq@@QAE@PAVio_thread_t@1@PAVsession_base_t@1@ABUoptions_t@1@PAUaddress_t@1@3_N@Z),该符号在函数 "private: void __thiscallzmq::session_base_t::start_connecting(bool)"(?start_connecting@session_base_t@zmq@@AAEX_N@Z) 中被引用
1>../../../../lib/libzmq.dll: fatal error LNK1120: 1 个无法解析的外部命令
解决办法是:将\zeromq-4.1.2\src下面的全部cpp文件都添加进libzmq工程的SourceFiles的虚拟目录下。
zeromq-4.1.2在windows下的编译的更多相关文章
- 原创 C++应用程序在Windows下的编译、链接:第一部分 概述
本文是对C++应用程序在Windows下的编译.链接的深入理解和分析,文章的目录如下: 我们先看第一章概述部分. 1概述 1.1编译工具简介 cl.exe是windows平台下的编译器,link.ex ...
- 【FFmpeg】Windows下FFmpeg编译
由于FFmpeg是基于Linux开发的开源项目,源代码和Windows下最常见的Visual Studio提供的C/C++编译器不兼容,因此它不能使用MSVC++编译,需要在Windows下配置一个类 ...
- C++应用程序在Windows下的编译、链接(一)概述
C++应用程序在Windows下的编译.链接(一)概述 本文是对C++应用程序在Windows下的编译.链接的深入理解和分析,文章的目录如下: 我们先看第一章概述部分. 1概述 1.1编译工具简介 c ...
- ACE在windows下的编译及配置(VS2010)
ACE在windows下的编译及配置(VS2010) 分类: -[小西南]- 2013-08-06 16:17 2354人阅读 评论( ...
- [转]QGis2.9在windows下的编译以及二次开发包下载
今天心血来潮,将QGis在github上的代码更新后,又编译了一下.留意到源代码包里面的INSTALL文件有更新,于是本次编译完全基于官方的编译说明.编译过程非常顺利,除了在CMake的第一次conf ...
- windows下rabbitmq-c编译(带openssl、无需MinGW)
因为项目原因,需要使用到rabbitmq的c客户端库.首先,参见上一篇windows下openssl编译,如果已经使用cmake编译过了,则先delete cache(File-Delete Cach ...
- Windows下PythonQt编译(vs2015+Qt5.11.2+PythonQt 3.2)
后记: 由于自己low,没有下载罪行的python3.2导致编译上遇到种种问题,后文可以参考,建议看: <Windows7 VS2015 下编译 PythonQt3.2> https:// ...
- Windows下PythonQt编译(vs2015+Qt5.11.2+PythonQt 3.2)探索
时间:2018年10月20日 笔者最近在做Qt方面的开发工作,需用到脚本程序对程序内部进行扩展,就很自然的想到了PythonQt,下面介绍PythonQt在Windows下的的安装编译心得,水平有限, ...
- 设置 Quick-Cocos2d-x 在 Windows 下的编译环境
http://cn.cocos2d-x.org/tutorial/show?id=1304 设置 Quick-Cocos2d-x 在 Windows 下的编译环境 Liao Yulei2014-08- ...
- JAVA 基础开发环境 vscode 搭建 Windows下VSCode编译运行简单java
JAVA 基础开发环境 vscode 搭建 来源 https://www.cnblogs.com/freewsf/p/7744728.html 对于使用 Visual Studio Code 的 Ja ...
随机推荐
- linux+nginx+python+django环境配置
Django是一个开放源代码的Web应用框架,由Python写成,它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的.python+django也是web开发者最受欢迎的框架.今天 ...
- 优动漫PAINT用户界面介绍
使用优动漫PAINT能够快速实现工程巨大的漫画.插画以及动画,从13年发布至今一直备受好评,目前优动漫PAINT1.6.6.1是最新的版本,新版本的完善也受到更多年轻伙伴的青睐,使用优动漫PAINT可 ...
- TF从文件中读取数据
从文件中读取数据 在TensorFlow中进行模型训练时,在官网给出的三种读取方式,中最好的文件读取方式就是将利用队列进行文件读取,而且步骤有两步: 把样本数据写入TFRecords二进制文件 从队列 ...
- windows 命令行 for 用法
for /r 目录名 %i in (匹配模式1,匹配模式2) do @echo %i for /r SATA %i in (*.txt) do @echo %i D:\REY\test>for ...
- 【JavaScript框架封装】JavaScript中的文本字符串的转义和反转义的实现
如果是想把本地的一个字符串串存到服务器,再次取出来的还是文本的话,就需要这个文本字符串的转义: /** * 对一个字符串的转义 * @param str * @return {*} */ functi ...
- WEBGL学习【十】运动模型
<!DOCTYPE HTML> <html lang="en"> <head> <title>LWEBGL6.2, Animated ...
- css3实现滚动手表
静态html: <!DOCTYPE html><html> <head> <meta charset="utf-8" /> < ...
- HDU 5307 He is Flying (生成函数+FFT)
题目传送门 题目大意:给你一个长度为$n$的自然数序列$a$,定义一段区间的权值为这一段区间里所有数的和,分别输出权值为$[0,\sum a_{i}]$的区间的长度之和 想到了生成函数的话,这道题并不 ...
- 关于sql连接查询(内联、左联、右联、全联)
内连接(INNER JOIN)(典型的连接运算,使用像 = 或 <> 之类的比较运算符).包括相等连接和自然连接. 内连接使用比较运算符根据每个表共有的列的值匹配两个表中的 ...
- NEFU 118
其实一道公式题: n!中素数i的幂为: [n/i]+[n/i^2]+[n/i^3]+[n/i^4]+...... #include <iostream> #include <cstd ...