zeromq-4.1.2在windows下的编译

来源:互联网 发布:java 角色权限管理 编辑:程序博客网 时间:2024/05/20 11:31

作者:朱金灿

来源: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: assumesbyte has 8 bitslong is 32 bitspointer can convert to and from long longlong 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 _WIN64typedef __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 _WIN64typedef 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_MAX0x7f#define INT16_MAX0x7fff#define INT32_MAX0x7fffffff#define UINT8_MAX0xff#define UINT16_MAX0xffff#define UINT32_MAX0xffffffff#define INT_LEAST8_MIN(-0x7f - _C2)#define INT_LEAST16_MIN(-0x7fff - _C2)#define INT_LEAST32_MIN(-0x7fffffff - _C2)#define INT_LEAST8_MAX0x7f#define INT_LEAST16_MAX0x7fff#define INT_LEAST32_MAX0x7fffffff#define UINT_LEAST8_MAX0xff#define UINT_LEAST16_MAX0xffff#define UINT_LEAST32_MAX0xffffffff#define INT_FAST8_MIN(-0x7f - _C2)#define INT_FAST16_MIN(-0x7fff - _C2)#define INT_FAST32_MIN(-0x7fffffff - _C2)#define INT_FAST8_MAX0x7f#define INT_FAST16_MAX0x7fff#define INT_FAST32_MAX0x7fffffff#define UINT_FAST8_MAX0xff#define UINT_FAST16_MAX0xffff#define UINT_FAST32_MAX0xffffffff #if _INTPTR == 0 || _INTPTR == 1#define INTPTR_MAX0x7fffffff#define INTPTR_MIN(-INTPTR_MAX - _C2)#define UINTPTR_MAX0xffffffff #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_MININT64_MIN #define PTRDIFF_MAXINT64_MAX#else /* _WIN64 */ #define PTRDIFF_MININT32_MIN #define PTRDIFF_MAXINT32_MAX#endif /* _WIN64 */#define SIG_ATOMIC_MININT32_MIN#define SIG_ATOMIC_MAXINT32_MAX#ifndef SIZE_MAX #ifdef _WIN64  #define SIZE_MAXUINT64_MAX #else /* _WIN64 */  #define SIZE_MAXUINT32_MAX #endif /* _WIN64 */#endif /* SIZE_MAX *///#define WCHAR_MIN0x0000#define WCHAR_MAX0xffff#define WINT_MIN0x0000#define WINT_MAX0xffff #define INT64_MIN(-0x7fffffffffffffff - _C2) #define INT64_MAX0x7fffffffffffffff #define UINT64_MAX0xffffffffffffffffU #define INT_LEAST64_MIN(-0x7fffffffffffffff - _C2) #define INT_LEAST64_MAX0x7fffffffffffffff #define UINT_LEAST64_MAX0xffffffffffffffffU #define INT_FAST64_MIN(-0x7fffffffffffffff - _C2) #define INT_FAST64_MAX0x7fffffffffffffff #define UINT_FAST64_MAX0xffffffffffffffffU #define INTMAX_MIN(-0x7fffffffffffffff - _C2) #define INTMAX_MAX0x7fffffffffffffff #define UINTMAX_MAX0xffffffffffffffffU#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_ttypedef __int8 int8_t;#endif#ifndef int16_ttypedef __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的虚拟目录下。

0 0
原创粉丝点击