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

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.hqwc.cn/news/52006.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法通过村——Hash和队列问题解析

算法的备胎Hash和找靠山的队列 备胎Hash Hash&#xff0c;不管是算法&#xff0c;还是在工程中都会大量使用。很多复杂的算法问题都用Hash能够轻松解决&#xff0c;也正是如此&#xff0c;在算法例就显得没什么思维含量&#xff0c;所以Hash是应用里的扛把子&#xff0c;但在算…

无涯教程-Lua - 垃圾回收

Lua使用自动内存管理&#xff0c;该管理使用基于Lua内置的某些算法的垃圾回收。 垃圾收集器暂停 垃圾收集器暂停用于控制垃圾收集器之前需要等待多长时间&#xff1b; Lua的自动内存管理再次调用它。值小于100意味着Lua将不等待下一个周期。同样&#xff0c;此值的较高值将导…

postgresql表膨胀处理之pgcompacttable部署及使用

环境&#xff1a; 1&#xff09;redhat-release&#xff1a;CentOS Linux release 7.6.1810 (Core) 2&#xff09;database version&#xff1a;postgresql 14.6 一、添加pgstattuple pgcompacttable工具使用过程中需要依赖pgstattuple&#xff0c;因此需先添加pgstattuple…

leetcode 33.搜索旋转排序数组

⭐️ 题目描述 &#x1f31f; leetcode链接&#xff1a;搜索旋转排序数组 ps&#xff1a; 本题是二分查找的变形&#xff0c;旋转排序数组之后其实会形成两个有序的区间。算出平均下标先判断是否与 target 相等&#xff0c;因为这样可以减少代码的冗余。如果前者不成立则使用平…

HTML 是什么?它的全称是什么?

聚沙成塔每天进步一点点 专栏简介HTML是什么&#xff1f;HTML的全称是什么&#xff1f;写在最后 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是为那些对We…

router 跳转打开新窗口

let url router.resolve({name: screen, })?.hrefwindow.open(url, _black)注意&#xff1a;新窗口无法全屏 参考链接&#xff1a;https://stackoverflow.com/questions/29281986/run-a-website-in-fullscreen-mode/30970886#30970886

大数据课程F4——HIve的其他操作

文章作者邮箱&#xff1a;yugongshiyesina.cn 地址&#xff1a;广东惠州 ▲ 本章节目的 ⚪ 掌握HIve的join&#xff1b; ⚪ 掌握HIve的查询和排序 ⚪ 掌握HIve的beeline ⚪ 掌握HIve的文件格式 ⚪ 掌握HIve的基本架构 ⚪ 掌握HIve的优化&#xff1b; 一、jo…

计算机网络(2) --- 网络套接字UDP

计算机网络&#xff08;1&#xff09; --- 网络介绍_哈里沃克的博客-CSDN博客https://blog.csdn.net/m0_63488627/article/details/131967378?spm1001.2014.3001.5501 目录 1.端口号 2.TCP与UDP协议 1.TCP协议介绍 1.TCP协议 2.UDP协议 3.理解 2.网络字节序 发送逻辑…

软件外包开发的GO语言特点

Go语言&#xff08;也称为Golang&#xff09;是由Google开发的一种编程语言。它具有许多特点&#xff0c;使其成为许多项目范围的优秀选择。Go语言适用于需要高性能、并发和简洁易读的项目&#xff0c;特别是面向网络和分布式应用的项目。今天和大家分享项目的特点及适用的项目…

学习笔记——压力测试案例,监控平台

测试案例 # 最简单的部署方式直接单机启动 nohup java -jar lesson-one-0.0.1-SNAPSHOT.jar > ./server.log 2>&1 &然后配置执行计划&#xff1a; 新建一个执行计划 配置请求路径 配置断言配置响应持续时间断言 然后配置一些查看结果的统计报表或者图形 然后我…

Redis的基础

一、进入redis 内部 / 关闭 # 方式一&#xff1a; // 进入redis redis-cli // 有密码输入密码 &#xff1a;auth [username] password auth 123456 # 方式二&#xff1a; // 进入redis 并且输入密码 redis-cli -a 123456// 如果在docker 里面的则可以 docker exec -it redis…

web爬虫第五弹 - JS逆向入门(猿人学第一题)

0- 前言 爬虫是一门需要实战的学问。 而对于初学者来说&#xff0c;要想学好反爬&#xff0c;js逆向则是敲门砖。今天给大家带来一个js逆向入门实例&#xff0c;接下来我们一步一步来感受下入门的逆向是什么样的。该案例选自猿人学练习题。猿人学第一题 1- 拿到需求 进入页面…