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

news/2024/10/23 5:43:51/

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


http://www.ppmy.cn/news/1000478.html

相关文章

Stephen Wolfram:“足够大的网络肯定能做任何事!”

“Surely a Network That’s Big Enough Can Do Anything!” “足够大的网络肯定能做任何事&#xff01;” The capabilities of something like ChatGPT seem so impressive that one might imagine that if one could just “keep going” and train larger and larger neura…

开源元数据管理平台Datahub最新版本0.10.5——安装部署手册(附离线安装包)

大家好&#xff0c;我是独孤风。 开源元数据管理平台Datahub近期得到了飞速的发展。已经更新到了0.10.5的版本&#xff0c;来咨询我的小伙伴也越来越多&#xff0c;特别是安装过程有很多问题。本文经过和群里大伙伴的共同讨论&#xff0c;总结出安装部署Datahub最新版本的部署手…

关于网页视频下载方法(仅针对存在index.m3u8)

关于网页视频下载方法&#xff08;仅针对存在index.m3u8&#xff09; 一、使用工具。 必备工具&#xff1a;迅雷、ffmpeg、python环境 选用工具&#xff1a;猫抓插件 二、获取m3u8、key和ts文件。 像腾讯课堂希望下载的课 1.下载m3u8文件。 首先使用【猫抓视频下载】的浏…

二叉树进阶版(C)

文章目录 1.树1.1概念1.2相关定义1.3 表示&#xff08;左孩子右兄弟&#xff09; 2.二叉树2.1概念2.2特殊的二叉树1. 满二叉树&#xff1a;2. 完全二叉树&#xff1a; 2.3二叉树的性质2.4练习 3.二叉树的存储结构1. 顺序存储2. 链式存储 4.完全二叉树的代码实现4.1堆的介绍1.堆…

【Web 表单】与用户数据打交道-1(mdn笔记)

0. Web 表单指南 我们将介绍 Web 表单的各个方面&#xff1a;HTML 结构、样式、验证表单数据&#xff0c;以及提交数据到服务器。 基本指南 你的第一个表单 第一次创建 HTML 表单的经验&#xff0c;包括设计一个简单表单、使用正确的 HTML 元素实现它、通过 CSS 添加一些非常简…

企业电子招标采购系统源码Spring Boot + Mybatis + Redis + Layui + 前后端分离 构建企业电子招采平台之立项流程图 tbms

&#xfeff; 项目说明 随着公司的快速发展&#xff0c;企业人员和经营规模不断壮大&#xff0c;公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境&#xff0c;最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范&am…

【Linux】节点之间配置免密登录

文章目录 1、实现2、原理3、SSH的理解 1、实现 先写实现&#xff0c;解决问题后有兴趣的自己看后面的原理。 以实现节点A&#xff08;主&#xff09;免密登录到节点B&#xff08;从&#xff09;为例&#xff1a;&#xff08;注意例子里节点B被登录&#xff09; 步骤一&#xf…

TabR:检索增强能否让深度学习在表格数据上超过梯度增强模型?

这是一篇7月新发布的论文&#xff0c;他提出了使用自然语言处理的检索增强Retrieval Augmented技术&#xff0c;目的是让深度学习在表格数据上超过梯度增强模型。 检索增强一直是NLP中研究的一个方向&#xff0c;但是引入了检索增强的表格深度学习模型在当前实现与非基于检索的…