当前位置: 首页 > news >正文

【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-devel
    
      Ubuntu系统(适用于 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 从应用程序中解耦出来,并且可以更加灵活的…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...

python报错No module named ‘tensorflow.keras‘

是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

解读《网络安全法》最新修订,把握网络安全新趋势

《网络安全法》自2017年施行以来,在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂,网络攻击、数据泄露等事件频发,现行法律已难以完全适应新的风险挑战。 2025年3月28日,国家网信办会同相关部门起草了《网络安全…...

windows系统MySQL安装文档

概览:本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容,为学习者提供全面的操作指导。关键要点包括: 解压 :下载完成后解压压缩包,得到MySQL 8.…...

Unity中的transform.up

2025年6月8日,周日下午 在Unity中,transform.up是Transform组件的一个属性,表示游戏对象在世界空间中的“上”方向(Y轴正方向),且会随对象旋转动态变化。以下是关键点解析: 基本定义 transfor…...