`

zookeeper----C/C++ client 例子在windows下编译运行

阅读更多
  1. 下载ZooKeeper,我下载的是3.4.6,解压
  2. vs2008或者以上
  3. 在windows 环境变量中,增加ZOOKEEPER_HOME定义,指向解压目录
  4. 手动修改project文件,$(ZOOKEEPER_HOME)\src\c\zookeeper.vcproj,用记事本(或者ultraedit等)打开,由于该文件是用utf-8编码的,在windows下默认带BOM头,直接删除前面2个字节(即BOM头)。
  5. 加载zookeeper.sln文件
  6. $(ZOOKEEPER_HOME)/bin/zkServer.cmd,启动ZooKeeper服务器(单机standalone)
  7. 编译并运行ZooKeeper.sln中的cli工程,启动ZooKeeper的client

 第4步,如果直接打开sln文件,会发现不能正常加载ZooKeeper工程。因为,我们windows的默认编码都是GBK,不能识别ZooKeeper.vcproj文件的BOM头。

 

目前,ZooKeeper自带的c版client,非常底层,易读性差和使用繁杂。

另外,JAVA版建议使用Curator,apache的顶级开源项目http://curator.apache.org/,Leader Select(领导选举)

 

如果在X64上编译zookeeper client,会有如下错误,使用了非标准扩展: 不支持在此结构上使用“_asm”关键字,需要修改程序

  •  fetch_and_add 这是一个原子操作级别函数,原型为int32_t fetch_and_add(volatile int32_t* operand, int incr),即 等价于:
    result=operand;
    operand =operand + incr;
    return result;

里面包含了汇编指令。

这个函数修改为如下,并在工程编译宏上加入WIN64,这样可以保证win32下仍然与源码一致,而win64下不同:

 

int32_t fetch_and_add(volatile int32_t* operand, int incr)
{
#ifndef WIN32
    int32_t result;
    asm __volatile__(
         "lock xaddl %0,%1\n"
         : "=r"(result), "=m"(*(int *)operand)
         : "0"(incr)
         : "memory");
   return result;
#else
    volatile int32_t result=0;
//wx 修改WIN32下函数  
#if !defined WIN64  
    _asm
    {
        mov eax, operand; //eax = v;
        mov ebx, incr; // ebx = i;
        mov ecx, 0x0; // ecx = 0;
        lock xadd dword ptr [eax], ecx; 
        lock xadd dword ptr [eax], ebx; 
        mov result, ecx; // result = ebx;        
     }
#else
    result = *operand;
    InterlockedAdd((volatile LONG*)operand,incr);
#endif
     return result;    
#endif
}
 

 

或者直接用InterlockedAdd函数替换,直接修改为:

 

 

int32_t fetch_and_add(volatile int32_t* operand, int incr)
{
#ifndef WIN32
    int32_t result;
    asm __volatile__(
         "lock xaddl %0,%1\n"
         : "=r"(result), "=m"(*(int *)operand)
         : "0"(incr)
         : "memory");
   return result;
#else
    volatile int32_t result= *operand;
    InterlockedAdd((volatile LONG*)operand,incr);
    return result;    
#endif
}

 

分享到:
评论

相关推荐

    ZooKeeper3.7.0(ZooKeeper-client)编译的头文件和库

    linux下编译zookeeper3.7.0出的头文件和库: proto.h recordio.h zookeeper.h zookeeper.jute.h zookeeper_log.h zookeeper_version.h libzookeeper_mt.a libzookeeper_mt.la libzookeeper_mt.so libzookeeper_mt....

    apache-zookeeper(apache-zookeeper-3.7.1-bin.tar.gz)

    apache-zookeeper分布式框架,压缩包内容:(apache-zookeeper-3.7.1-bin.tar.gz、apache-zookeeper-3.7.1.tar.gz、apache-zookeeper-3.6.4-bin.tar.gz、apache-zookeeper-3.6.4.tar.gz、apache-zookeeper-3.5.10-...

    apache-zookeeper-3.5.10-bin 环境搭配

    apache-zookeeper-3.5.10-bin 环境搭配 ...ZooKeeper代码版本中,提供了分布式独享锁、选举、队列的接口,代码在$zookeeper_home\src\recipes。其中分布锁和队列有Java和C两个版本,选举只有Java版本。

    apache-zookeeper-3.6.3-bin.zip

    在Windows环境下安装Zookeeper是分布式开发和部署的重要步骤,下面我们将详细探讨这个过程。 一、Zookeeper的下载与解压 首先,你需要从Apache官方网站下载最新稳定的Zookeeper版本,如"apache-zookeeper-3.6.3-bin...

    apache-zookeeper-3.5.6-bin.tar

    在 `apache-zookeeper-3.5.6-bin.tar` 这个压缩包中,包含了 Apache ZooKeeper 3.5.6 版本的二进制文件,这是部署和运行 ZooKeeper 服务所必需的。这个版本引入了多项改进和修复,使得 ZooKeeper 更加稳定和高效。 ...

    apache-zookeeper-3.7.1

    apache-zookeeper-3.7.1 apache-zookeeper-3.7.1 apache-zookeeper-3.7.1 apache-zookeeper-3.7.1 apache-zookeeper-3.7.1 apache-zookeeper-3.7.1 apache-zookeeper-3.7.1 apache-zookeeper-3.7.1 apache-zookeeper...

    zookeeper-3.4.10.tar.gz

    《ZooKeeper 3.4.10在Linux环境下的安装与使用详解》 ZooKeeper,一个由Apache基金会开发的分布式协调服务,是大数据生态系统中的重要组件,尤其在分布式应用、集群管理、命名服务等领域有着广泛的应用。本文将详细...

    zookeeper-3.4.5-cdh5.16.2.tar.gz

    4. **分布式锁**:提供分布式锁机制,确保在多线程环境下对共享资源的访问控制。 5. **队列管理**:实现先进先出(FIFO)队列,用于任务调度或消息传递。 在CDH5.16.2中,Zookeeper与Hadoop、HBase、Hive等组件紧密...

    最新版linux apache-zookeeper-3.7.0-bin.tar.gz

    - C API:对于非Java语言的支持,Zookeeper也提供了C语言的API。 7. **Zookeeper的版本特性**: - Zookeeper 3.7.0引入了更多的性能优化,比如更快的数据同步和更高的吞吐量。 - 错误处理和稳定性得到了增强,...

    zookeeper-3.4.10-API文档-中文版.zip

    赠送jar包:zookeeper-3.4.10.jar; 赠送原API文档:zookeeper-3.4.10-javadoc.jar; 赠送源代码:zookeeper-3.4.10-sources.jar; 赠送Maven依赖信息文件:zookeeper-3.4.10.pom; 包含翻译后的API文档:zookeeper-...

    zookeeper-3.4.5-cdh5.15.1.tar.gz

    4. **启动Zookeeper**:在Zookeeper目录下,执行`bin/zkServer.sh start`命令启动服务。通过`bin/zkServer.sh status`检查服务状态。 5. **集群部署**:如果需要搭建Zookeeper集群,需在所有节点上重复上述步骤,并...

    apache-zookeeper-3.5.7-bin.tar.gz

    这个压缩包"apache-zookeeper-3.5.7-bin.tar.gz"是Zookeeper的可执行二进制文件包,用于在Linux或Unix类操作系统上部署和运行Zookeeper服务器。 **Zookeeper的基本概念:** 1. **节点(ZNode)**:Zookeeper的数据...

    zookeeper-3.8.0安装包下载

    7. logs:日志文件默认保存的目录,可以在此查看 Zookeeper 服务的运行日志,帮助排查问题。 8. build:构建相关文件,通常不需要直接操作。 在集群环境中,Zookeeper 使用 Paxos 算法的变种 zab(Zookeeper Atomic...

    最新版windows apache-zookeeper-3.5.7-bin.tar.gz

    1. **bin** 目录:这里存放了可执行文件,如`zkServer.cmd`(Windows下的启动脚本)、`zkCli.cmd`(命令行客户端)和其他辅助工具。 2. **conf** 目录:包含了默认的配置文件,如`zoo.cfg`,这是Zookeeper的主要配置...

    apache-zookeeper-3.5.9-bin.tar.gz

    在"apache-zookeeper-3.5.9-bin.tar.gz"这个压缩包中,包含了Zookeeper 3.5.9版本的二进制发行版,用于在各种操作系统上部署和运行Zookeeper服务。 1. **Zookeeper基本概念** - **Znode**: Zookeeper中的数据存储...

    apache-zookeeper-3.7.0-bin.tar.gz

    apache-zookeeper-3.7.0-bin.tar.gz

    apache-zookeeper-3.8.4-bin.tar

    Zookeeper是Apache Hadoop项目的一部分,它在分布式环境中起到关键的角色,尤其是在大数据处理和分布式计算领域。 **Zookeeper的核心概念:** 1. **节点(Znode)**:Zookeeper中的数据存储单元,类似于文件系统的...

    linux中zookeeper安装包zookeeper-3.4.8.tar

    在这个压缩包中,包含了Zookeeper 3.4.8的所有组件和依赖,便于用户在Linux环境下快速安装和部署。 打开这个压缩包,你会发现`zookeeper-3.4.8.jar`,这是Zookeeper的核心库文件,包含了所有必要的类和方法,使得...

    apache-zookeeper-3.8.4二进制安装包

    apache-zookeeper-3.8.4二进制安装包

    apache-zookeeper-3.6.3-bin.tar的压缩包,解压到本地即可使用,还有zk.sh的脚本以及zoo.cfg

    apache-zookeeper-3.6.3-bin.tar的压缩包,解压到本地即可使用,还有zk.sh的脚本以及zoo.cfg和xsync。ZooKeeper 是一个分布式协调服务 ,由 Apache 进行维护。ZooKeeper 可以视为一个高可用的文件系统。ZooKeeper ...

Global site tag (gtag.js) - Google Analytics