zeromq-4.1.2在windows下的编译

转自:http://blog.csdn.net/clever101/article/details/47455501

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,代码如下:

[cpp]  view plain copy
  1. /* stdint.h standard header */  
  2. #ifndef _STD_INT  
  3. #define _STD_INT  
  4.   
  5. #ifndef _STDINT  
  6. #define _STDINT  
  7. #ifndef RC_INVOKED  
  8. #include <yvals.h>  
  9.   
  10. /* NB: assumes 
  11.     byte has 8 bits 
  12.     long is 32 bits 
  13.     pointer can convert to and from long long 
  14.     long long is longest type 
  15.  */  
  16.   
  17. _C_STD_BEGIN  
  18.         /* TYPE DEFINITIONS */  
  19. typedef signed char int8_t;  
  20. typedef short int16_t;  
  21. typedef int int32_t;  
  22.   
  23. typedef unsigned char uint8_t;  
  24. typedef unsigned short uint16_t;  
  25. typedef unsigned int uint32_t;  
  26.   
  27. typedef signed char int_least8_t;  
  28. typedef short int_least16_t;  
  29. typedef int int_least32_t;  
  30.   
  31. typedef unsigned char uint_least8_t;  
  32. typedef unsigned short uint_least16_t;  
  33. typedef unsigned int uint_least32_t;  
  34.   
  35. typedef char int_fast8_t;  
  36. typedef int int_fast16_t;  
  37. typedef int int_fast32_t;  
  38.   
  39. typedef unsigned char uint_fast8_t;  
  40. typedef unsigned int uint_fast16_t;  
  41. typedef unsigned int uint_fast32_t;  
  42.   
  43. #ifndef _INTPTR_T_DEFINED  
  44.  #define _INTPTR_T_DEFINED  
  45.  #ifdef _WIN64  
  46. typedef __int64 intptr_t;  
  47.  #else /* _WIN64 */  
  48. typedef _W64 int intptr_t;  
  49.  #endif /* _WIN64 */  
  50. #endif /* _INTPTR_T_DEFINED */  
  51.   
  52. #ifndef _UINTPTR_T_DEFINED  
  53.  #define _UINTPTR_T_DEFINED  
  54.  #ifdef _WIN64  
  55. typedef unsigned __int64 uintptr_t;  
  56.  #else /* _WIN64 */  
  57. typedef _W64 unsigned int uintptr_t;  
  58.  #endif /* _WIN64 */  
  59. #endif /* _UINTPTR_T_DEFINED */  
  60.   
  61. typedef _Longlong int64_t;  
  62. typedef _ULonglong uint64_t;  
  63.   
  64. typedef _Longlong int_least64_t;  
  65. typedef _ULonglong uint_least64_t;  
  66.   
  67. typedef _Longlong int_fast64_t;  
  68. typedef _ULonglong uint_fast64_t;  
  69.   
  70. typedef _Longlong intmax_t;  
  71. typedef _ULonglong uintmax_t;  
  72.   
  73.         /* LIMIT MACROS */  
  74. #define INT8_MIN    (-0x7f - _C2)  
  75. #define INT16_MIN   (-0x7fff - _C2)  
  76. #define INT32_MIN   (-0x7fffffff - _C2)  
  77.   
  78. #define INT8_MAX    0x7f  
  79. #define INT16_MAX   0x7fff  
  80. #define INT32_MAX   0x7fffffff  
  81. #define UINT8_MAX   0xff  
  82. #define UINT16_MAX  0xffff  
  83. #define UINT32_MAX  0xffffffff  
  84.   
  85. #define INT_LEAST8_MIN      (-0x7f - _C2)  
  86. #define INT_LEAST16_MIN     (-0x7fff - _C2)  
  87. #define INT_LEAST32_MIN     (-0x7fffffff - _C2)  
  88.   
  89. #define INT_LEAST8_MAX      0x7f  
  90. #define INT_LEAST16_MAX     0x7fff  
  91. #define INT_LEAST32_MAX     0x7fffffff  
  92. #define UINT_LEAST8_MAX     0xff  
  93. #define UINT_LEAST16_MAX    0xffff  
  94. #define UINT_LEAST32_MAX    0xffffffff  
  95.   
  96. #define INT_FAST8_MIN       (-0x7f - _C2)  
  97. #define INT_FAST16_MIN      (-0x7fff - _C2)  
  98. #define INT_FAST32_MIN      (-0x7fffffff - _C2)  
  99.   
  100. #define INT_FAST8_MAX       0x7f  
  101. #define INT_FAST16_MAX      0x7fff  
  102. #define INT_FAST32_MAX      0x7fffffff  
  103. #define UINT_FAST8_MAX      0xff  
  104. #define UINT_FAST16_MAX     0xffff  
  105. #define UINT_FAST32_MAX     0xffffffff  
  106.   
  107.  #if _INTPTR == 0 || _INTPTR == 1  
  108. #define INTPTR_MAX          0x7fffffff  
  109. #define INTPTR_MIN          (-INTPTR_MAX - _C2)  
  110. #define UINTPTR_MAX         0xffffffff  
  111.   
  112.  #else /* _INTPTR == 2 */  
  113. #define INTPTR_MIN          (-_LLONG_MAX - _C2)  
  114. #define INTPTR_MAX          _LLONG_MAX  
  115. #define UINTPTR_MAX         _ULLONG_MAX  
  116. #endif /* _INTPTR */  
  117.   
  118. #define INT8_C(x)   (x)  
  119. #define INT16_C(x)  (x)  
  120. #define INT32_C(x)  ((x) + (INT32_MAX - INT32_MAX))  
  121.   
  122. #define UINT8_C(x)  (x)  
  123. #define UINT16_C(x) (x)  
  124. #define UINT32_C(x) ((x) + (UINT32_MAX - UINT32_MAX))  
  125.   
  126. #ifdef _WIN64  
  127.  #define PTRDIFF_MIN        INT64_MIN  
  128.  #define PTRDIFF_MAX        INT64_MAX  
  129. #else /* _WIN64 */  
  130.  #define PTRDIFF_MIN        INT32_MIN  
  131.  #define PTRDIFF_MAX        INT32_MAX  
  132. #endif /* _WIN64 */  
  133.   
  134. #define SIG_ATOMIC_MIN  INT32_MIN  
  135. #define SIG_ATOMIC_MAX  INT32_MAX  
  136.   
  137. #ifndef SIZE_MAX  
  138.  #ifdef _WIN64  
  139.   #define SIZE_MAX      UINT64_MAX  
  140.  #else /* _WIN64 */  
  141.   #define SIZE_MAX      UINT32_MAX  
  142.  #endif /* _WIN64 */  
  143. #endif /* SIZE_MAX */  
  144.   
  145. //#define WCHAR_MIN 0x0000  
  146. #define WCHAR_MAX   0xffff  
  147.   
  148. #define WINT_MIN    0x0000  
  149. #define WINT_MAX    0xffff  
  150.   
  151.  #define INT64_MIN  (-0x7fffffffffffffff - _C2)  
  152.  #define INT64_MAX  0x7fffffffffffffff  
  153.  #define UINT64_MAX 0xffffffffffffffffU  
  154.   
  155.  #define INT_LEAST64_MIN    (-0x7fffffffffffffff - _C2)  
  156.  #define INT_LEAST64_MAX    0x7fffffffffffffff  
  157.  #define UINT_LEAST64_MAX   0xffffffffffffffffU  
  158.   
  159.  #define INT_FAST64_MIN     (-0x7fffffffffffffff - _C2)  
  160.  #define INT_FAST64_MAX     0x7fffffffffffffff  
  161.  #define UINT_FAST64_MAX    0xffffffffffffffffU  
  162.   
  163.  #define INTMAX_MIN     (-0x7fffffffffffffff - _C2)  
  164.  #define INTMAX_MAX     0x7fffffffffffffff  
  165.  #define UINTMAX_MAX    0xffffffffffffffffU  
  166.   
  167. #define INT64_C(x)      ((x) + (INT64_MAX - INT64_MAX))  
  168. #define UINT64_C(x)     ((x) + (UINT64_MAX - UINT64_MAX))  
  169. #define INTMAX_C(x)     INT64_C(x)  
  170. #define UINTMAX_C(x)    UINT64_C(x)  
  171. _C_STD_END  
  172. #endif /* RC_INVOKED */  
  173. #endif /* _STDINT */  
  174.   
  175.  #if defined(_STD_USING)  
  176. using _CSTD int8_t; using _CSTD int16_t;  
  177. using _CSTD int32_t; using _CSTD int64_t;  
  178.   
  179. using _CSTD uint8_t; using _CSTD uint16_t;  
  180. using _CSTD uint32_t; using _CSTD uint64_t;  
  181.   
  182. using _CSTD int_least8_t; using _CSTD int_least16_t;  
  183. using _CSTD int_least32_t;  using _CSTD int_least64_t;  
  184. using _CSTD uint_least8_t; using _CSTD uint_least16_t;  
  185. using _CSTD uint_least32_t; using _CSTD uint_least64_t;  
  186.   
  187. using _CSTD intmax_t; using _CSTD uintmax_t;  
  188.   
  189. using _CSTD uintptr_t;  
  190. using _CSTD intptr_t;  
  191.   
  192. using _CSTD int_fast8_t; using _CSTD int_fast16_t;  
  193. using _CSTD int_fast32_t; using _CSTD int_fast64_t;  
  194. using _CSTD uint_fast8_t; using _CSTD uint_fast16_t;  
  195. using _CSTD uint_fast32_t; using _CSTD uint_fast64_t;  
  196.  #endif /* defined(_STD_USING) */  
  197.  #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下的

[cpp]  view plain copy
  1. #ifndef int8_t  
  2. typedef __int8 int8_t;  
  3. #endif  
  4. #ifndef int16_t  
  5. typedef __int16 int16_t;  
  6. #endif  

改为

[cpp]  view plain copy
  1. //#ifndef int8_t  
  2. //typedef __int8 int8_t;  
  3. //#endif  
  4. //#ifndef int16_t  
  5. //typedef __int16 int16_t;  
  6. //#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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值