rpcz VC2010 构建

rpcz 是应用ZeroMQ和Protobuf开发的RPC.

见: https://github.com/reinferio/rpcz

及 https://code.google.com/p/rpcz/

rpcz的CMake脚本应该是仅用于Linux. 用于VC需要更改错误。

CMake Error at D:/Program Files/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:1192 (message):
  Unable to find the requested Boost libraries.
如果找不到boost_thread库,添加
SET(Boost_USE_STATIC_LIBS TRUE)
因为Windows下Boost默认是不生成动态库的。

Required library ZeroMQ NOT FOUND.
Could NOT find PROTOBUF (missing:  PROTOBUF_LIBRARY PROTOBUF_INCLUDE_DIR)
可手工在cmake-gui中设置ZeroMQ的INCLUDE_DIR和LIBRARY, 以及protobuf的源码目录.

CMake生成sln后, 用VC打开, 构建.
cl : Command line error D8021: invalid numeric argument '/Wextra'

将gcc编译参数用if包括:
+if(CMAKE_COMPILER_IS_GNUCXX)
set(CMAKE_CXX_FLAGS
  "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wno-sign-compare -Wno-unused-parameter")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS} -g -Werror")
+endif(CMAKE_COMPILER_IS_GNUCXX)

application.cc(18): fatal error C1083: Cannot open include file: 'zmq.hpp': No such file or directory
需要设置 cppzmq 目录.
添加CPPZMQ_DIR.
或者直接 include_directories(E:/JinQing/Src/cppzmq)

src\rpcz/rpcz.pb.h(293): error C2059: syntax error : 'constant'
生成的代码 NO_ERROR 与VC Error.h 中的 define 冲突.
改为 APPLICATION_NO_ERROR 常量,不会与宏冲突。

  clock.cc
..\..\..\..\LibSrc\rpcz\src\rpcz\clock.cc(18): fatal error C1083: Cannot open include file: 'sys/time.h': No such file or directory
将gettimeofday()改为:
    return boost::chrono::high_resolution_clock().now().time_since_epoch().count / 1000000;

  connection_manager.cc
..\..\..\..\LibSrc\rpcz\src\rpcz\connection_manager.cc(25): fatal error C1083: Cannot open include file: 'pthread.h': No such file or directory
DELETE

  connection_manager.cc
..\..\..\..\LibSrc\rpcz\src\rpcz\connection_manager.cc(28): fatal error C1083: Cannot open include file: 'unistd.h': No such file or directory
改为:
#ifdef WIN32
#include <process.h>  // for getpid()
#else
#include <unistd.h>  // for getpid()
#endif

..\..\..\..\LibSrc\rpcz\src\rpcz\reactor.cc(122): error C2079: 'action' uses undefined struct 'rpcz::install_signal_handler::sigaction'
..\..\..\..\LibSrc\rpcz\src\rpcz\reactor.cc(125): error C3861: 'sigemptyset': identifier not found
改为:
void install_signal_handler() {
#ifdef WIN32
  signal(SIGINT, signal_handler);
  signal(SIGTERM, signal_handler);
#else
  struct sigaction action;
  action.sa_handler = signal_handler;
  action.sa_flags = 0;
  sigemptyset(&action.sa_mask);
  sigaction(SIGINT, &action, NULL);
  sigaction(SIGTERM, &action, NULL);
#endif  // WIN32
}

  server.cc
..\..\..\..\LibSrc\rpcz\src\rpcz\server.cc(20): fatal error C1083: Cannot open include file: 'sys/errno.h': No such file or directory
DELETE

  zmq_utils.cc
D:/LibSrc/rpcz/include\rpcz/zmq_utils.hpp(58): error C2146: syntax error : missing ';' before identifier 'has_more_'
改为int

------ Build started: Project: rpcz, Configuration: Release Win32 ------
LINK : fatal error LNK1104: cannot open file 'libboost_date_time-vc100-mt-1_53.lib'
Add lib dir.

3>------ Build started: Project: zsendrpc, Configuration: Debug Win32 ------
3>  zsendrpc.cc
3>LINK : fatal error LNK1104: cannot open file 'Debug\rpcz.lib'
仅生成rpcz.dll, 没有lib. 因为没有export.
应该生成静态库.
开启 rpcz_build_static
并且让zsendrpc在rpcz.lib之后编译:

add_dependencies(zsendrpc rpcz_static)  # zsendrpc need rpcz.lib

修改后的代码见:

https://github.com/jinq0123/rpcz

rpcz VC2010 构建的更多相关文章

  1. 如何运行 rpcz python example

    试着运行 rpcz-python 的 example.过程记录如下.假设protobuf-py已经按照protobuf的安装说明安装了.发现 protobuf-2.5.0版的python包是pytho ...

  2. VC2010工程依赖不再自动链接

    发现 VC2010 Express  设置了 Project Dependencies 之后并没有自动链接. 而在VC2008中工程依赖不仅影响构建顺序,也会自动链接依赖项. 具体说明见: http: ...

  3. 构建一个基本的前端自动化开发环境 —— 基于 Gulp 的前端集成解决方案(四)

    通过前面几节的准备工作,对于 npm / node / gulp 应该已经有了基本的认识,本节主要介绍如何构建一个基本的前端自动化开发环境. 下面将逐步构建一个可以自动编译 sass 文件.压缩 ja ...

  4. 快速构建H5单页面切换骨架

    在Web App和Hybrid App横行的时代,为了拥有更好的用户体验,单页面应用顺势而生,单页面应用简称`SPA`,即Single Page Application,就是只有一个HTML页面的应用 ...

  5. .NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法

    .NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法 0x00 为什么需要Map(MapWhen)扩展 如果业务逻辑比较简单的话,一条主管道就够了,确实用不到 ...

  6. .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类

    .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类 0x00 为什么要引入扩展方法 有的中间件功能比较简单,有的则比较复杂,并且依赖其它组件.除 ...

  7. .NET Core中间件的注册和管道的构建(1)---- 注册和构建原理

    .NET Core中间件的注册和管道的构建(1)---- 注册和构建原理 0x00 问题的产生 管道是.NET Core中非常关键的一个概念,很多重要的组件都以中间件的形式存在,包括权限管理.会话管理 ...

  8. .Net中的AOP系列之构建一个汽车租赁应用

    返回<.Net中的AOP>系列学习总目录 本篇目录 开始一个新项目 没有AOP的生活 变更的代价 使用AOP重构 本系列的源码本人已托管于Coding上:点击查看. 本系列的实验环境:VS ...

  9. 使用ServiceStack构建Web服务

    提到构建WebService服务,大家肯定第一个想到的是使用WCF,因为简单快捷嘛.首先要说明的是,本人对WCF不太了解,但是想快速建立一个WebService,于是看到了MSDN上的这一篇文章 Bu ...

随机推荐

  1. Docker的名字空间

    名字空间是 Linux 内核一个强大的特性.每个容器都有自己单独的名字空间,运行在其中的应用都像是在独立的操作系统中运行一样.名字空间保证了容器之间彼此互不影响. pid 名字空间 不同用户的进程就是 ...

  2. HTML DOM 改变 HTML 内容

    HTML DOM 允许 JavaScript 改变 HTML 元素的内容. 改变 HTML 输出流 JavaScript 能够创建动态的 HTML 内容: 今天的日期是: Thu Feb 25 201 ...

  3. javaweb异常提示信息统一处理(使用springmvc,附源码)

    一.前言 后台出现异常如何友好而又高效地回显到前端呢?直接将一堆的错误信息抛给用户界面,显然不合适. 先不考虑代码实现,我们希望是这样的: (1)如果是页面跳转的请求,出现异常了,我们希望跳转到一个异 ...

  4. HOG OpenCV 代码片段

    直接上代码: #include <opencv2/opencv.hpp> using namespace cv; #include <cmath> using namespac ...

  5. Java异常处理-----finally

    finally 1: 实现方式一: try{ // 可能发生异常的代码 } catch( 异常类的类型 e ){ // 当发生指定异常的时候的处理代码 }catch- 比较适合用于专门的处理异常的代码 ...

  6. Dynamics CRM2016 Web API之创建记录

    前篇介绍了通过primary key来查询记录,那query的知识点里面还有很多需要学习的,这个有待后面挖掘,本篇来简单介绍下用web api的创建记录. 直接上代码,这里的entity的属性我列了几 ...

  7. ORACLE数据库管理常用查询语句

    /*查看表空间的名称及大小*/ SELECT t.tablespace_name, round(SUM(bytes / (1024 * 1024)), 0) ts_size FROM dba_tabl ...

  8. RxJava操作符(04-过滤操作)

    转载请标明出处: http://blog.csdn.net/xmxkf/article/details/51656494 本文出自:[openXu的博客] 目录: Debounce Distinct ...

  9. 基于OpenCV 的美颜相机推送直播流

    程序流程: 1.图像采集 先从opencv(2.4.10版本)采集回来摄像头的图像,是一帧一帧的 每一帧图像是一个矩阵,opencv中的mat 数据结构. 2.人脸的美化 人脸美化,我们用的皮肤检测, ...

  10. Android简易实战教程--第六话《开发一键锁屏应用2·完成》

    转载请注明出处:http://blog.csdn.net/qq_32059827/article/details/51885687点击打开链接 上一篇,初步开发了这个应用,功能都有了(见http:// ...