作者:朱金灿

来源: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下的编译的更多相关文章

  1. 原创 C++应用程序在Windows下的编译、链接:第一部分 概述

    本文是对C++应用程序在Windows下的编译.链接的深入理解和分析,文章的目录如下: 我们先看第一章概述部分. 1概述 1.1编译工具简介 cl.exe是windows平台下的编译器,link.ex ...

  2. 【FFmpeg】Windows下FFmpeg编译

    由于FFmpeg是基于Linux开发的开源项目,源代码和Windows下最常见的Visual Studio提供的C/C++编译器不兼容,因此它不能使用MSVC++编译,需要在Windows下配置一个类 ...

  3. C++应用程序在Windows下的编译、链接(一)概述

    C++应用程序在Windows下的编译.链接(一)概述 本文是对C++应用程序在Windows下的编译.链接的深入理解和分析,文章的目录如下: 我们先看第一章概述部分. 1概述 1.1编译工具简介 c ...

  4. ACE在windows下的编译及配置(VS2010)

    ACE在windows下的编译及配置(VS2010) 分类:             -[小西南]-              2013-08-06 16:17     2354人阅读     评论( ...

  5. [转]QGis2.9在windows下的编译以及二次开发包下载

    今天心血来潮,将QGis在github上的代码更新后,又编译了一下.留意到源代码包里面的INSTALL文件有更新,于是本次编译完全基于官方的编译说明.编译过程非常顺利,除了在CMake的第一次conf ...

  6. windows下rabbitmq-c编译(带openssl、无需MinGW)

    因为项目原因,需要使用到rabbitmq的c客户端库.首先,参见上一篇windows下openssl编译,如果已经使用cmake编译过了,则先delete cache(File-Delete Cach ...

  7. Windows下PythonQt编译(vs2015+Qt5.11.2+PythonQt 3.2)

    后记: 由于自己low,没有下载罪行的python3.2导致编译上遇到种种问题,后文可以参考,建议看: <Windows7 VS2015 下编译 PythonQt3.2> https:// ...

  8. Windows下PythonQt编译(vs2015+Qt5.11.2+PythonQt 3.2)探索

    时间:2018年10月20日 笔者最近在做Qt方面的开发工作,需用到脚本程序对程序内部进行扩展,就很自然的想到了PythonQt,下面介绍PythonQt在Windows下的的安装编译心得,水平有限, ...

  9. 设置 Quick-Cocos2d-x 在 Windows 下的编译环境

    http://cn.cocos2d-x.org/tutorial/show?id=1304 设置 Quick-Cocos2d-x 在 Windows 下的编译环境 Liao Yulei2014-08- ...

  10. JAVA 基础开发环境 vscode 搭建 Windows下VSCode编译运行简单java

    JAVA 基础开发环境 vscode 搭建 来源 https://www.cnblogs.com/freewsf/p/7744728.html 对于使用 Visual Studio Code 的 Ja ...

随机推荐

  1. (转)shiro权限框架详解05-shiro授权

    http://blog.csdn.net/facekbook/article/details/54910606 本文介绍 授权流程 授权方式 授权测试 自定义授权realm 授权流程 开始构造Secu ...

  2. (4.33)sql server2014内存数据库(内存中OLTP(In-Memory OLTP))

    查看文章:https://blog.51cto.com/ultrasql/1626514

  3. python编写简单的html登陆页面(2)

    1  在python编写简单的html登陆页面(1)的基础上在延伸一下: 可以将动态分配数据,实现页面跳转功能: 2  跳转到新的页面:return render_template('home1.ht ...

  4. Windows环境下制作MACOS X U盘安装盘

    前两天在朋友的MAC BOOK AIR上胡乱操作时把原来安装好的双系统搞坏了,一不小心又把硬盘格式化了,导致MAC系统也没了,于是只能重新安装MACOS系统,并根据网友提供的教程,在MACOS安装OK ...

  5. 4056 hdu4866 Shooting

    题目描述 In the shooting game, the player can choose to stand in the position of [1, X] to shoot, you ca ...

  6. Linux分布式测试

    在使用Jmeter进行性能测试时,如果并发数比较大(比如最近项目需要支持1000并发),单台电脑的配置(CPU和内存)可能无法支持,这时可以使用Jmeter提供的分布式测试的功能. 执行机和调度机做好 ...

  7. vim牛逼的code工具: ctags+ cscope

    自己总结 在我的工作目录里的.vimrc中做了这样的配置:   set tags=tags;   set autochdir 在项目根目录里利用"sudo ctags -R *", ...

  8. spring实现定时任务的两种方式之spring @scheduled注解方式

    1.使用spring的 scheduled使用注解的方式 这种方法的好处是:使用方便,配置少,提高开发效率: 缺点是:如果使用服务器集群部署方式的时候,其自身无法解决定时任务重复执行的问题. 2.首先 ...

  9. 02.OOP面向对象-2.例子

    class clothes: #初始化属性 def __init__(self,name,color): self.name = name self.color = color #转字符串 def _ ...

  10. 实战:一、使用mongo做一个注册的小demo

    思路:1.使用mongoose 进行 数据库的链接 2.使用Schema来进行传输字段的定义 3.安装koa-router进行数据处理4.安装koa-bodyparser 进行post数据交互5.解决 ...