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 ...
随机推荐
- Eclipse中Git的基本使用
以下所有命令如没有特殊说明,均在命令行中完成(cmd窗口) 1.全局设定(需要告诉git自己是谁) git config --global user.name "你的名字或昵称&quo ...
- OpenCV中GPU模块使用
CUDA IT168的文章系列: Cuda的初始化:http://tech.it168.com/a2011/0715/1218/000001218458.shtml OpenCV: OpenCV中GP ...
- **PCD数据获取:Kinect+OpenNI+PCL对接(代码)
前言: PCL使用点云作为数据格式,Kinect可以直接作为三维图像的数据源产生三维数据,其中的桥梁是OpenNI和PrimeSense.为了方便地使用Kinect的数据,还是把OpenNI获取的基础 ...
- bootstrap与jQuery结合的动态进度条
此款进度条实现的功能: 1.利用了bootstrap的进度条组件. a.在最外层的<div>中加入class .progress,在里层<div>加入class .progre ...
- 应用二:Vue之ElementUI Form表单校验
(注:本文适用于有一定Vue基础或开发经验的读者,文章就知识点的讲解不一定全面,但却是开发过程中很实用的) 表单校验是前端开发过程中最常用到的功能之一,根据个人的工作经验总结在此对表单校验功能的基 ...
- springboot-注解讲解
@Configuration:声明我们JdbcConfig是一个配置类 @PropertySource:指定属性文件的路径是:classpath:jdbc.properties 通过@Value为属性 ...
- IIS访问php页面问题,报告404错误
IIS访问php页面出现问题,所有php页面找不到,显示404页面,html页面可以正常访问. 搜索结果: 方案1: 打开WEB服务扩展,把“所有未知ISAPI扩展”设为允许! 方案2: PHP没有完 ...
- JS棋盘
有一个棋盘,有64个方格,在第一个方格里面放1粒芝麻重量是0.00001kg, 第二个里面放2粒,第三个里面放4,棋盘上放的所有芝麻的重量 <!DOCTYPE html> <html ...
- Linux进程地址管理之mm_struct
FROM : http://www.cnblogs.com/Rofael/archive/2013/04/13/3019153.html Linux对于内存的管理涉及到非常多的方面,这篇文章首先从对进 ...
- css 垂直居中方法总结
工作中遇到垂直居中问题,特此总结了一下几种方式与大家分享.本文讨论的垂直居中仅支持IE8+ 1.使用绝对定位垂直居中 HTML <div class="container"& ...