【undefined reference to xxx】zookeeper库编译和安装 / sylar项目ubuntu20系统编译
最近学习sylar项目,编译项目时遇到链接库不匹配的问题,记录下自己解决问题过程,虽然过程很艰难,但还是解决了,以下内容供大家参考!
undefined reference to ``问题分析
-
项目编译报错
/usr/bin/ld: ../lib/libsylar.so: undefined reference to `ZOO_READONLY_STATE' /usr/bin/ld: ../lib/libsylar.so: undefined reference to `zookeeper_init2' /usr/bin/ld: ../lib/libsylar.so: undefined reference to `zoo_set_servers' /usr/bin/ld: ../lib/libsylar.so: undefined reference to `ZOO_NOTCONNECTED_STATE' /usr/bin/ld: ../lib/libsylar.so: undefined reference to `zoo_get_current_server' /usr/bin/ld: ../lib/libsylar.so: undefined reference to `ZOO_CONTAINER' -
应该是链接到的库文件中不含这些字符,因为之前是
sudo apt-get install libzookeeper-dev安装的,版本较久(3.4.13),我也看了它的头文件源码,确实没有这些定义变量和函数;(注意这里的我看的是zookeeper.h头文件,而libzookeeper_mt.so文件是安装编译时产生的,因此两个文件内容是一致的;下面讲下如何通过二进制文件libzookeeper_mt.so来查看是否包含某种字符) -
查看验证
libzookeeper_mt.so链接文件是否包含对应的字符find / -name libzookeeper_mt.so在/usr/lib/libzookeeper_mt.so
定位找到了链接文件;nm -D libzookeeper_mt.so | grep ZOO_READONLY_STATE
查看这个二进制文件中的可显示字符是否有报错的字符,发现并没有,可以确定当前系统安装库的zookeeper版本的确没有对应变量和函数定义,那么就需要安装新的版本库;
编译安装zookeeper
我之前通过
apt安装的,并且查看了下里面源库中没有更新的版本,因此只能下载库安装包,手动编译安装;
zookeeper下载地址 https://dlcdn.apache.org/zookeeper/
-
下载安装包后,可以查看
README_packaging.md,里面详细讲解了如何构建和安装这个库,并且指出最终生成的链接文件路径;具体操作如下:- 依赖软件包安装命令
RHEL系统:
yum install cppunit yum install python-setuptools yum install openssl openssl-devel yum install cyrus-sasl-md5 cyrus-sasl-gssapi cyrus-sasl-develUbuntu系统(适用于 16.04+):apt-get install libcppunit-dev apt-get install python-setuptools python2.7-dev apt-get install openssl libssl-dev apt-get install libsasl2-modules-gssapi-mit libsasl2-modules libsasl2-dev- 使用 Maven (没有指令的话需要安装)构建包:以下命令将清理所有内容并构建 tarball 包,同时跳过测试:
mvn clean install -DskipTests- 构建 C 客户端,需要激活
full-build配置文件:
mvn clean -Pfull-build mvn install -Pfull-build -DskipTests- 编译后文件位置
- 用户可执行文件在 `zookeeper-client/zookeeper-client-c/target/c/bin`。- 原生库在 `zookeeper-client/zookeeper-client-c/target/c/lib`。 // 我们所需的链接文件路径- 原生库头文件在 `zookeeper-client/zookeeper-client-c/target/c/include/zookeeper`。 - 依赖软件包安装命令
-
如果构建安装顺利的话,就可以看到成功显示;

-
下述就是需要的链接文件,然后将对应的文件复制到
/usr/lib/ 或者 /usr/local/lib/下,保证系统编译器可以找到;

-
构建时如果报错,例如需要添加JAVA_HOME环境变量,在
~/.bashrc文件中添加,自己安装JAVA的jdk路径即可;
具体操作见:https://blog.csdn.net/weixin_50570038/article/details/143256298
最后检查下是否成功

此时发现可以找到ZOO_READONLY_STATE字符变量,完结!!
通过以上操作,可以解决编译项目过程中,遇到链接文件可能由于版本不支持导致无法成功编译的问题;
反正遇到问题不要怕,一步步分析、解决,这个过程也可以深入理解linux系统下的编译过程(虽然我花了两天才解决这个问题)
相关文章:
【undefined reference to xxx】zookeeper库编译和安装 / sylar项目ubuntu20系统编译
最近学习sylar项目,编译项目时遇到链接库不匹配的问题,记录下自己解决问题过程,虽然过程很艰难,但还是解决了,以下内容供大家参考! undefined reference to 问题分析 项目编译报错 /usr/bin/ld: ../lib/lib…...
IDEA解决 properties 文件乱码问题
博主介绍: 计算机科班人,全栈工程师,掌握C、C#、Java、Python、Android等主流编程语言,同时也熟练掌握mysql、oracle、sqlserver等主流数据库,具有丰富的项目经验和开发技能。提供相关的学习资料、程序开发、技术解答、…...
超越Jira?2024年探索项目管理新工具!
一、Jira 在项目管理中的地位 Jira 作为一款在项目管理领域久负盛名的工具,有着不可忽视的地位。它以强大的问题跟踪和管理功能著称,无论是软件缺陷、新功能需求、任务分配还是技术难题的解决,都能精准把控。其高可定制性更是满足了不同团队…...
大模型,多模态大模型面试问题【计算图,LLama,交叉熵,SiLU,RLHF】
大模型,多模态大模型面试问题【计算图,LLama,交叉熵,SiLU,RLHF】 问题一:讲一讲计算图中pytorch是什么,TensorFlow是什么?1. PyTorch2. TensorFlow区别总结 问题二:Llama…...
凌雄科技打造DaaS模式,IT设备产业链由内而外嬗变升级
恒指正处在一种“奇妙”的波动当中。低估反弹,瞬时拉高,极速回调。这些变化集中在一条曲线上,让市场无所适从。 但事实上,所有的趋势一定总是以长期为锚。这个长期的尺度,可能会超过一般人的预估。因为中间需要经历很…...
Oracle视频基础1.2.1练习
1.2.1 需求: 完整格式查看所有用户进程判断oracle启动状态 连接sqlplus不登陆 以sysdba身份登陆,通过登陆信息判断oracle启动状态 启动数据库,查系统全局区动态组件表 使用shell,启动监听然后返回sql ps -ef sqlplus /nolog con…...
15、基于AT89C52的数码电子时钟proteus仿真设计
一、仿真原理图: 二、仿真效果: 三、相关代码: 1、timer0定时中断: void Time0(void ) interrupt 1 using 1 { count++; if(count == 20) { count = 0; second++; if(second >= 60) { second = 0; …...
UML总结
零:学习链接 UML_哔哩哔哩_bilibili 一:UML概述 二:类图 类图(Class Diagram)是统一建模语言(UML)中一种重要的图形表示,用于描述系统中的类及其之间的关系。它是面向对象设计中常…...
网站被浏览器提示不安全怎么办?——附解决方案
当你的网站被浏览器标记为不安全时,这通常意味着有一些问题需要解决。以下是一些解决这个问题的步骤: 检查SSL证书:首先,确保你的网站使用了有效的SSL证书。SSL证书可以加密浏览器和服务器之间的数据传输,保护用户数据…...
“前端兼容——CSS篇”(进阶版)
“前端兼容——CSS篇”(进阶版) 上一篇文章写了css 兼容问题处理的基础篇 点击这里基础篇—传送门,这里想给粉丝分享一下css 更深一点的兼容场景,和处理方案 文章目录 “前端兼容——CSS篇”(进阶版)进阶CS…...
使用Docker Compose简化微服务部署
文章目录 Docker Compose简介安装Docker Compose在Windows上安装Docker Compose在macOS上安装Docker Compose在Linux上安装Docker Compose 创建Docker Compose文件创建compose文件构建并运行服务 使用Docker Compose网络定义网络验证网络连接 使用Docker Compose卷定义卷使用卷…...
2025考研各省市网上确认时间汇总!
2025考研各省市网上确认时间汇总! 安徽:11月1日至5日 福建:11月1日-11月5日 山东:10月31日9:00至11月5日12:00 新疆:10月31日至11月4日17:00 湖南:11月1日9:00-4日12:00 广东:10月下旬至1…...
SSL/TLS 密码套件漏洞分析以及修复方法
1. 前言 在当今数字化时代,网络安全至关重要。SSL/TLS 协议作为保障网络通信安全的重要手段,广泛应用于各类网络应用中。然而,如同任何技术一样,SSL/TLS 也并非绝对安全,存在着一些可能被攻击者利用的漏洞。本文将深入…...
[Vue warn]: Do not use built-in or reserved HTML elements as component id:
这个Vue警告信息表明不要将内置或保留的HTML元素名称用作组件的ID。在Vue中,组件的ID应该是唯一的,以确保没有冲突。很可能是一个保留字或者是一个内置的HTML元素名称,所以Vue拒绝了这样的用法。 解决方法: 更改组件的ID&#x…...
【大数据学习 | kafka】kafka的shell操作
1. topic的管理命令(kafka-topics.sh) 参数如下: 1.1 创建 # 创建 kafka-topics.sh --bootstrap-server nn1:9092 --create --topic topic_a --partitions 3 --replication-factor 2 # --bootstrap-server 指定集群地址,因为每…...
UE4安卓打aab包时,同时存在“gradle”、“arm64/gradle”两个Gradle工程的原因
两个Gradle工程的现象 在出安卓aab包时,观察到存在以下两个Gradle工程: 1、Intermediate\Android\arm64\gradle (称为arm64的Gradle) 2、Intermediate\Android\gradle(称为根下的Gradle) 它们存在一些小…...
淘宝API接口( item_get- 淘宝商品详情查询)
淘宝商品详情查询 API(item_detail)主要用于获取淘宝商品的详细信息,以下是相关介绍: 请求参数: num_iid:必填参数,代表商品的唯一标识 ID。通过该 ID 可以准确地指定要查询的商品。例如&#…...
Soanrquber集成Gitlab 之 gitlab用户配置和身份验证
集成Gitlab : gitlab用户配置和身份验证 说明: 使得Sonarquber的用户登录与Gitlab的用户登录/认证模块同步 什么是 SonarQube? SonarQube 是一个开源的代码质量管理平台,用于持续检查和分析代码的质量和安全性。它提供了多种功…...
沪深A股上市公司数据报告分析
数据分析报 目录 数据分析报告 1.引言 1.1 背景介绍 1.2 报告目的 1.3 报告范围 1.4 关键术语定义 2. 数据收集与预处理 2.1 数据来源概述 2.2 数据收集过程 2.3 数据预处理步骤 3. 数据可视化 3.1分析地区对公司数量的影响 3.2分析行业分类是否影响公…...
Elasticsearch Search Template 搜索模板
Elasticsearch Search Template 所谓 search template 搜索模板其实就是: 预先定义好查询语句 DSL 的结构并预留参数搜索的时再传入参数值渲染出完整的 DSL ,最后进行搜索 使用搜索模板可以将 DSL 从应用程序中解耦出来,并且可以更加灵活的…...
5分钟免费解锁Photoshop AVIF插件:新一代图像压缩的终极解决方案
5分钟免费解锁Photoshop AVIF插件:新一代图像压缩的终极解决方案 【免费下载链接】avif-format An AV1 Image (AVIF) file format plug-in for Adobe Photoshop 项目地址: https://gitcode.com/gh_mirrors/avi/avif-format AVIF(AV1 Image File F…...
海思Hi3516 GPIO复用避坑指南:从Excel引脚复用表到实际配置的完整解析
海思Hi3516 GPIO复用配置实战:从寄存器解析到避坑全攻略 当你在调试Hi3516开发板时,是否遇到过这样的场景:明明按照手册配置了GPIO,硬件却毫无反应?或者发现某个复用引脚无法正常工作?这些问题往往源于对海…...
OSEK-NM网络管理实战:从Alive/Ring/LimpHome报文解析到逻辑环故障排查
OSEK-NM网络管理实战:从Alive/Ring/LimpHome报文解析到逻辑环故障排查 当车载CAN总线上的某个ECU突然"失联",或者车辆熄火后某些模块仍在异常耗电时,背后往往隐藏着OSEK网络管理协议的运行异常。作为汽车电子领域的"神经系统检…...
你的微信聊天记录被加密了?用这个开源工具轻松解密!
你的微信聊天记录被加密了?用这个开源工具轻松解密! 【免费下载链接】WechatDecrypt 微信消息解密工具 项目地址: https://gitcode.com/gh_mirrors/we/WechatDecrypt 你是否曾经想过备份微信聊天记录,却发现数据库文件无法打开&#x…...
Arm服务器架构设计:虚拟化与安全增强解析
1. Arm服务器基础架构设计哲学 现代Arm服务器架构的设计核心在于"硬件虚拟化优先"理念。与传统x86架构渐进式添加虚拟化功能不同,Armv8/v9架构从设计之初就将虚拟化支持作为基础能力。这种设计哲学在SBSA(Server Base System Architecture&…...
Taotoken多模型聚合平台为开发者提供稳定高效的大模型调用服务
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Taotoken多模型聚合平台为开发者提供稳定高效的大模型调用服务 对于需要集成多种大模型能力的AI应用开发者而言,管理不…...
从SELinux到AppArmor:聊聊Linux内核安全模块LSM的实战选择与避坑指南
从SELinux到AppArmor:Linux内核安全模块实战选择与避坑指南 在当今云计算和容器化技术蓬勃发展的背景下,Linux系统的安全性变得前所未有的重要。作为系统管理员或DevOps工程师,我们常常需要在安全性和易用性之间寻找平衡点。Linux内核安全模块…...
如何彻底解决IDM试用期限制:3步快速重置完整指南
如何彻底解决IDM试用期限制:3步快速重置完整指南 【免费下载链接】idm-trial-reset Use IDM forever without cracking 项目地址: https://gitcode.com/gh_mirrors/id/idm-trial-reset 还在为Internet Download Manager(IDM)的30天试用…...
独立开发者如何借助Taotoken低成本实验多种大模型能力
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 独立开发者如何借助Taotoken低成本实验多种大模型能力 对于独立开发者而言,在产品原型阶段进行技术选型与功能验证&…...
OpenCore Legacy Patcher终极指南:老Mac升级新系统的完整教程
OpenCore Legacy Patcher终极指南:老Mac升级新系统的完整教程 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher OpenCore Legacy Patcher是一款免费…...
