windows编译zookeeker动态库供C++链接使用以及遇到的错误处理方法

2023-11-11

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

windows编译zookeeker动态库供C++链接使用以及遇到的错误处理方法 的相关文章

随机推荐

  • 西门子触摸屏vb脚本从入门到精通_如何使用西门子触摸屏做一个弹窗?

    上篇文章我们讲到 西门子触摸屏变量的三种更新方式 根据命令 循环连续 循环使用 默认 这篇我们将一个实际案例 现场有台设备想在执行开机过程时触摸自动跳到执行过程的画面 假如PLC有个执行开机的变量M0 0 当M0 0为1的时候 自动切换画面
  • vue 评论小案例

  • vqvae详细解释

    模型综述 VQ VAE Vector Quantised Variational AutoEncoder 首先出现在论 Neural Discrete Representation Learning VAE假设隐向量分布服从高斯分布 VQV
  • 一些开源的,好看的前端组件/样式库

    以下是一些受欢迎的开源 CSS 样式库 Bootstrap https getbootstrap com Materialize CSS https materializecss com Bulma https bulma io Found
  • linux下测试磁盘的读写IO速度

    使用dd命令 这不是一个专业的测试工具 不过如果对于测试结果的要求不是很苛刻的话 平时可以使用来对磁盘的读写速度作一个简单的评估 另外由于这是一个免费软件 基本上 NIX系统上都有安装 首先了解两个特殊设备 dev null 伪设备 回收站
  • 使用OpenCV-python对植物图片进行分类

    文章目录 图片分类的思路和需要加载的库函数说明 核心代码分析 数据预处理 文件处理和命名匹配 数据预处理 特征提取和标签提取 学习模型 数据划分和模型训练 预测输出 利用训练好的模型进行图片分类 完整代码附录和运行结果 图片分类的思路和需要
  • vmware无法打开内核设备 打开模块DevicePowerOn电源失败

    无法打开内核设备 VMCIDev VMX 重叠 I O 操作在进 行中 你想要在安装 VMware Workstation 前重启吗 打开模块DevicePowerOn电源失败 启动VM时报错如上 解决方法一 亲测可行 对虚拟机相对应的 v
  • 使用GetProcAddress获取C++重载函数

    GetProcAddress函数是用来在动态加载完动态链接库后 从链接库中获取函数地址的 它的用法如下 FARPROC GetProcAddress HMODULE hModule LPCSTR lpProcName hModule参数就是
  • Spring三级缓存详解

    Spring三级缓存是为了解决对象间的循环依赖问题 A依赖B B依赖A 这就是一个简单的循环依赖 我们来先看看三级缓存的源码 1 查看 获取Bean 的源码 注意getSingleton 方法 public class DefaultSin
  • PLSQL Developer安装和配置

    PLSQL Developer安装 下载安装地址 https www allroundautomations com registered plsqldev 1 自己选择合适版本 2 接下来默认安装即可 3 本地连接直接输入 4 远程连接需
  • Canvas 画布随机变换背景色

  • JavaScript获取当前时间函数封装

    JavaScript获取当前时间函数封装 function getNowDate var str var weekList 日 一 二 三 四 五 六 var date new Date var year date getFullYear
  • Labelme标注灰度图,执行出现错误:AssertionError: rgb must be 3 dimensional的解决方案

    labelme标注灰度图后 执行json to dataset之后 出现错误 AssertionError rgb must be 3 dimensional 解决办法 找到安装labelme的位置 找到json to dataset py
  • 二等分计算机打印机尺寸,电脑打印纸三种等分是什么尺寸

    满意答案 kimwk 2015 11 10 采纳率 55 等级 8 已帮助 6710人 打印纸一般规格有宽度为241mm的和381mm的 三等分就是341 381 3 而长边这边尺寸也是固定的 是280mm 一般长边长度可以分等分 有不分等
  • Movidius神经计算棒3-完整配置开发环境

    上面是我的微信和QQ群 欢迎新朋友的加入 cd ncsdk make install 这里有个题外话 英特尔这个玩意搞得不太友好 很多软件都有版本限制 高了或或者低了都要不得 这倒也没啥事 但是有个受影响的是 官方提供的make insta
  • 【Linux】系统下各个文件目录的作用

    目录名 作用 bin 普通用户的可执行文件 二进制 boot linux内核和系统启动文件 dev 设备文件 etc 系统配置文件 home 用户主目录 initrd 启动时挂在initrdimg映像文件 lib 共享库文件 lost fo
  • MySQL必知必会——第六章过滤数据

    过滤数据 本章将讲授如何使用SELECT语句的WHERE子句指定搜索条件 使用WHERE子句 数据库一般包含大量的数据 很少需要检索表中所有的行 通常只会根据需求来提取部分表数据 只检索所需数据需要指定搜索条件 search criteri
  • hdf5 简介、中文文档、中英对照文档 下载

    hdf5 文档 下载链接 含jar包 源码 pom 组件名称 中文 文档 下载链接 中英对照 文档 下载链接 hdf5 1 12 0 1 5 5 jar hdf5 1 12 0 1 5 5 API文档 中文版 zip hdf5 1 12 0
  • Android应用开发 一课一得

    Android是一种基于Linux平台开发的操作系统 Android应用开发这一门课 以项目为载体 以实做为手段 我通过学习和实践 对Android的开发流程 核心概念和常见技术有了基本的理解 在本学期的Android课程中 我首先学习了A
  • windows编译zookeeker动态库供C++链接使用以及遇到的错误处理方法

    windows下面C 链接zookeeper资料不多 特此记录一下 编译环境VS 2015 一 相关安装包安装下载 1 zookeeper zookeeper3 6 4 下载zip包解压即可 2 ant apache ant 1 9 16