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的相关接口可以正常调用。