windows下面C++链接zookeeper资料不多,特此记录一下
 编译环境VS 2015
一. 相关安装包安装下载
1. zookeeper
zookeeper3.6.4
 下载zip包解压即可
2. ant
apache-ant-1.9.16
 将包进行解压D:project\apache-ant-1.9.16,然后配置环境变量
新建 ANT_HOME 系统变量 D:project\apache-ant-1.9.16
添加 %ANT_HOME%\lib 到 CLASSPATH 系统变量中
添加 %ANT_HOME%\bin 到 PATH 系统变量中
完成之后保存退出进入cmd命令 执行 ant -version 进行验证
3. Maven
apache-maven-3.9.0
 解压,修改conf/settings.xml配置文件,在标签中添加一个子节点并保存。
<mirror>
  <id>aliyunmaven</id>
  <mirrorOf>*</mirrorOf>
  <name>阿里云公共仓库</name>
  <url>https://maven.aliyun.com/repository/public</url>
</mirror>
 
参考https://developer.aliyun.com/mvn/guide
 配置环境变量
添加 D:project\apache-maven-3.9.0\bin 目录到 Path 环境变量中
完成之后保存退出进入cmd命令 执行 mvn --version 命令查看是否成功
4. Cmake
cmake下载
 安装后还需要配置环境变量
二. 编译zookeeper
进入到zookeeper-release-3.6.4\zookeeper-jute 目录中
执行 mvn compile 命令
成功后进入 \zookeeper-client\zookeeper-client-c目录
如果是没有Java环境的话,执行mvn compile可能会报JDK找不到的问题,需要安装JDK并且配置环境变量
然后在该目录下创建一个空目录,build,进入并执行下列命令
cmake ./…
然后会在build目录下生成
#运行完成后再使用VS2015打开zookeeper.sln 文件即可进行编译
项目打开默认编译的是Win32,不是x64位的,需要改一下,配置管理器新建64位
 
 项目默认编译的是zookeeper静态库,可以通过设置编译属性编译静态库

右击zookeeper属性,将扩展名和配置类型设置为动态库
 
 编译可能会报模块计算机类型“X86”与目标计算机类型“x64”冲突,需要修改库管理器-命令行machine:X86改成machine:X64
 
 编译成功后,Debug目录下会生成zookeeper.dll
新建一个include目录,放zookeeper的头文件
 新建一个lib目录,放zookeeper.dll
然后Qt右键添加库,选择外部库,会发现动态库需要lib文件
 
 这是因为vs没有将导入库lib生成,这里的lib库不是指静态库,而是引入库,如果直接强行导入dll库编译,代码中引用zk的函数会报找不到zk的相关符号。
参考 https://blog.csdn.net/dxm809/article/details/114527294
 得知__declspec(dllexport)这个宏会决定是否生成lib导入库文件
我们打开zookeeper.h,可以看到如果定义了DLL_EXPORT,会使用__declspec(dllexport)
 
 我们打开zookeeper的属性,在预处理器中的预处理定义添加DLL_EXPORT,然后重新编译生成,就会生成dll和lib,记得将dll和lib放在QT项目下。

 QT编译可能还是会报找不到xxx函数符号等错误,是因为THREADED的问题,vs2015编译的时候,预处理定义添加了THREADED,lib肯定是存在的,然是QT使用zookeeper.h的时候并没有定义THREADED,可以在zookeeper.h加一行。
#define THREADED 1
 

到此为止,zookeeper的相关接口可以正常调用。





![Vue [Day2]](https://img-blog.csdnimg.cn/167e8c4bf9514b6d8c4c2047a94f9973.png)













