【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系统下的编译过程(虽然我花了两天才解决这个问题)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/460024.html

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

相关文章

sql进阶篇

1.更新记录 AC&#xff1a; update examination_info set tag replace(tag, "PYTHON", "Python") where tag "PYTHON";2.删除记录 AC&#xff1a; DELETE FROM exam_record WHERE timestampdiff(minute, start_time, submit_time) < 5AND…

【每日刷题】Day145

【每日刷题】Day145 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 375. 猜数字大小 II - 力扣&#xff08;LeetCode&#xff09; 2. LCR 112. 矩阵中的最长递增路径 …

【tomcat系列漏洞利用】

Tomcat 服务器是一个开源的轻量级Web应用服务器&#xff0c;在中小型系统和并发量小的场合下被普遍使用。主要组件&#xff1a;服务器Server&#xff0c;服务Service&#xff0c;连接器Connector、容器Container。连接器Connector和容器Container是Tomcat的核心。一个Container…

WPF的行为(Behavior)

WPF&#xff08;Windows Presentation Foundation&#xff09;是微软.NET框架中用于构建Windows客户端应用程序的UI框架。它提供了一种声明性的方式来定义用户界面&#xff0c;并且支持MVVM&#xff08;Model-View-ViewModel&#xff09;设计模式。 在WPF中&#xff0c;“行为…

【LeetCode】两数之和、大数相加

主页&#xff1a;HABUO&#x1f341;主页&#xff1a;HABUO 1.两数之和 题目&#xff1a;给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一…

React核心思维模型(一)

一、数据和视图分离&#xff0c;数据改变驱动视图更新 <div>Tom</div>如果我们想修改上述div盒子中的Tom为Jerry&#xff0c;应该怎样修改呢 在jquery中我们直接把界面元素抓过来修改 document.getElementsByTagName(div).item(0) Jerry 但在react中&#xf…

DataSophon集成ApacheImpala的过程

注意: 本次安装操作系统环境为Anolis8.9(Centos7和Centos8应该也一样) DataSophon版本为DDP-1.2.1 整合的安装包我放网盘了: 通过网盘分享的文件&#xff1a;impala-4.4.1.tar.gz等2个文件 链接: https://pan.baidu.com/s/18KfkO_BEFa5gVcc16I-Yew?pwdza4k 提取码: za4k 1…

使用 Kibana 将地理空间数据导入 Elasticsearch 以供 ES|QL 使用

作者&#xff1a;来自 Elastic Craig Taverner 如何使用 Kibana 和 csv 采集处理器将地理空间数据采集到 Elasticsearch 中&#xff0c;以便在 Elasticsearch 查询语言 (ES|QL) 中进行搜索。Elasticsearch 具有强大的地理空间搜索功能&#xff0c;现在 ES|QL 也具备这些功能&am…

ffmpeg视频滤镜:定向模糊-dblur

滤镜简述 dblur 官网链接 > https://ffmpeg.org/ffmpeg-filters.html#dblur 有一个模糊滤镜&#xff0c;我试了一下&#xff0c;没有感觉到它的特殊之处, 这里简单介绍一下。 滤镜使用 滤镜的参数 angle <float> ..FV.....T. set angle (from 0 t…

浏览器HTTP缓存解读(HTTP Status:200 304)

为什么要有浏览器缓存&#xff1f; 浏览器缓存(Brower Caching)是浏览器对之前请求过的文件进行缓存&#xff0c;以便下一次访问时重复使用&#xff0c;节省带宽&#xff0c;提高访问速度&#xff0c;降低服务器压力 http缓存机制主要在http响应头中设定&#xff0c;响应头中…

Facebook登录崩溃?别急,神奇秘籍拯救你丨出海笔记

今天文章很短&#xff0c;但非常实用&#xff01; 相信运营同学或多或少都会在登录facebook的时候遇到: 您所关注的链接可能已损坏&#xff0c;或页面可能已被移除。 This page isnt available, The link you followed may be broken, or the page may have been removed. 然…

Redmi Note 12 Turbo 1TB root教程

文章目录 通过手机下载完整的系统包通过payload-dumper-go 提取boot.img把下载的安装包直接拉到payload-dumper-go.exe通过第三步 找到boot.img把boot.img 拉到手机Download&#xff0c;通过magisk修补boot修补完成后找到这个文件&#xff0c;通过adb刷入 连接不上adb 通过手机…

Xcode 16.1 (16B40) 发布下载 - Apple 平台 IDE

Xcode 16.1 (16B40) 发布下载 - Apple 平台 IDE IDE for iOS/iPadOS/macOS/watchOS/tvOS/visonOS 发布日期&#xff1a;2024 年 10 月 28 日 Xcode 16.1 包含适用于 iOS 18.1、iPadOS 18.1、Apple tvOS 18.1、watchOS 11.1、macOS Sequoia 15.1 和 visionOS 2.1 的 SDK。Xco…

Docker-微服务项目部署

环境准备 1.微服务项目 参考&#xff1a;通过网盘分享的文件&#xff1a;wolf2w_cloud.zip 链接: https://pan.baidu.com/s/1Lr4k6LPIJ59gVNA_DgKM_Q?pwdkjxt 提取码: kjxt 前端项目&#xff1a;trip-mgrsite-ui&#xff0c;trip-website-ui&#xff0c;trip-wenda-ui 服务项…

【Redis】常见基本全局命令

一、Redis俩大核心命令 由于Redis是以键值对的形式进行数据存取&#xff0c;自然就离不开不断的存储和获取&#xff0c;而其所对应的命令则是set和get&#xff0c;如此说来二者为Redis的核心基础命令也不为过。 作用&#xff1a;用于存储Stirng类型的数据 返回&#xff1a;当…

Ubuntu下安装和配置MySQL5.7教程

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 在ubuntu下安装MySQL数据库 查看操作系统版本 ​编辑 添加 MySQL APT 源 访问下载页面并下载发布包 安装发布包 安装MySQL 查看MySQL状态 开启自启动 登…

普通人适合做大模型吗?过程中会发生什么潜在的挑战?

对于普通人来说&#xff0c;直接进行大模型的研发和训练可能存在一定的挑战&#xff0c;因为这通常需要以下资源和知识&#xff1a; 专业知识&#xff1a; 大模型的开发需要深入理解机器学习、深度学习、神经网络等领域的知识。 计算资源&#xff1a; 大模型的训练需要高性能的…

(蓝桥杯C/C++)——常用库函数

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 一、 二分查找 1.二分查找的前提 2.binary_ search函数 3.lower_bound和upper_bound 二、排序 1.sort概念 2.sort的用法 3.自定义比较函数 三、全排列 1.next p…

qt配置https请求

qt应用版本 windows 32位 先说下心理路程&#xff0c;你能遇到的我都遇到了&#xff0c;你能想到的我都想到了&#xff0c;怎么解决看这一篇就够了&#xff0c;从上午12点到晚上12点几乎没离开电脑&#xff08;除了吃饭&#xff09;&#xff0c;对于openssl这种用的时候无感&am…

HTML练习题:彼岸的花(web)

展示效果: 代码: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>彼岸の花</title><style…