zoukankan      html  css  js  c++  java
  • zeromq-4.1.2在windows下的编译

    作者:朱金灿

    来源:http://blog.csdn.net/clever101

     

            zeromq是一个最近比较火的跨平台消息中间件,最近准备研究它,故下载它的源码编译了一下。我是使用VS2008编译的,下载下来在zeromq-4.1.2uildsmsvcvs2008目录下找到相应的解决方案文件。编译过程中有几个注意事项:

     

    1.    出现1>e: estzeromq-4.1.2includezmq.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.2include目录下,然后在zeromq-4.1.2includezmq.h将

    #   include <stdint.h>改为#   include "stdint.h"这样做是为了从本地目录开始查找头文件。

    2. 1>e: estzeromq-4.1.2includestdint.h(17): error C2371: “int8_t”: 重定义;不同的基类型

    1>        e: estzeromq-4.1.2srcstdint.hpp(42): 参见“int8_t”的声明

    解决办法:将zeromq-4.1.2srcstdint.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.2src下面的全部cpp文件都添加进libzmq工程的SourceFiles的虚拟目录下。

  • 相关阅读:
    我再也不相信正解了……
    悬线法
    防线 Defence
    奶牛浴场
    环状两段最大子段和
    三步必杀
    加工生产调度
    种树
    UVA11134 传说中的车 Fabled Rooks
    UVA 11054 Gergovia的酒交易 Wine trading in Gergovia
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6470057.html
Copyright © 2011-2022 走看看