[Go运行问题]/lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_xx‘ not found
问题描述
在一台ubuntu 20的机器上通过go 编译生成的可执行程序(使用了cgo),在其他ubuntu机器上运行时出现如下问题
/lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.32' not found
问题分析
因为go代码里的依赖库使用到了sndfile,它必须使用cgo了,所以需要gcc基础库依赖。 在编译机器上的gcc版本比较高,在运行机器上的gcc版本稍微老了一点点,所以在运行时抛出了异常。
我们可以使用如下命令来查看当前机器上gcc的版本
strings libc.so.6 | grep GLIBC_
GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_2.13
GLIBC_2.14
GLIBC_2.15
GLIBC_2.16
GLIBC_2.17
GLIBC_2.18
GLIBC_2.22
GLIBC_2.23
GLIBC_2.24
GLIBC_2.25
GLIBC_2.26
GLIBC_2.27
GLIBC_2.28
GLIBC_2.29
GLIBC_2.30
GLIBC_PRIVATE
可以看到这里的最大版本就是2.30,所以不支持编译时所使用的2.32
解决思路
有两个思路,一是提升运行环境的gcc版本,二是降低编译环境的gcc版本
但是注意,无论哪一种,我都强烈反对直接对机器的gcc版本做升级或者降级
因为libc是很多基础软件,包括os的底层依赖,一旦单独更新了这个版本,能可能造成整个系统的不稳定,甚至是崩溃。
解决方案
一、 提升运行环境的gcc版本
可以采用容器技术,将该程序部署到指定版本的ubuntu容器中执行
二、 降低编译环境的gcc版本
方案1:
通过CGO参数,可以指定gcc的版本。 不过这个前提是你需要在目标机器上把libc.so文件拷贝出来,然后复制到编译机器上。(注意:不要放置到系统路径下)
然后通过如下参数来编译
CGO_LDFLAGS='-g -O2 -Wl,-rpath=. -Wl, --dynamic-linker=ld-linux-x86-64.so.2' CGO_CFLAGS="-L. -l/my/path/libc.so.6,/my/path/ld-linux-x86-64.so.2"go build
其中-rpath是指运行时指定寻找libc.so的路径,请根据你的环境来修改。
编译完成后,通过ldd看以下依赖.
但是需要注意的是,如果依赖的二进制库也是依赖libc编译的,那么这些库可能也存在一样的依赖问题。所以这种情况只适合没有其他依赖库依赖cgo的情况。
验证
使用LD_PRELOAD可以加载与本机不同的libc来运行程序
LD_PRELOAD=/lib64/libc.so xxx
方案2:
同样采用容器化来部署相同的编译环境
参考
Multiple glibc on a Single Linux Machine
gcc link options
Dynamic Linking to a Different libc
overwrite default /lib64/ld-linux-x86-64.so.2 to call executables
相关文章:
[Go运行问题]/lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_xx‘ not found
问题描述 在一台ubuntu 20的机器上通过go 编译生成的可执行程序(使用了cgo),在其他ubuntu机器上运行时出现如下问题 /lib/x86_64-linux-gnu/libc.so.6: version GLIBC_2.32 not found 问题分析 因为go代码里的依赖库使用到了sndfile,它必须使用cgo了…...
matrix-breakout-2-morpheus 靶机渗透
信息收集: 1.nmap存活探测: nmap -sn -r 192.168.10.1/24 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-04-06 12:13 CST Nmap scan report for 192.168.10.1 Host is up (0.00056s latency). MAC Address: 00:50:56:C0:00:08 (VMware) Nmap…...
爬虫 新闻网站 以湖南法治报为例(含详细注释) V1.0
目标网站:湖南法治报 爬取目的:为了获取某一地区更全面的在湖南法治报已发布的宣传新闻稿,同时也让自己的工作更便捷 环境:Pycharm2021,Python3.10, 安装的包:requests,csvÿ…...
物联网实战--入门篇之(十)安卓QT--后端开发
目录 一、项目配置 二、MQTT连接 三、数据解析 四、数据更新 五、数据发送 六、指令下发 一、项目配置 按常规新建一个Quick空项目后,我们需要对项目内容稍微改造、规划下。 首先根据我们的需要在.pro文件内添加必要的模块,其中quick就是qml了&…...
[Java]网络编程
网络编程概述 计算机网络: 把分布在不同地理区域的具有独立功能的计算机,通过通信设备与线路连接起来,由功能完善的软件实现资源共享和信息传递的系统。 Java是 Internet 上的语言,它从语言级上提供了对网络应用程序的支持,程序…...
重读Java设计模式: 适配器模式解析
引言 在软件开发中,经常会遇到不同接口之间的兼容性问题。当需要使用一个已有的类,但其接口与我们所需的不兼容时,我们可以通过适配器模式来解决这一问题。适配器模式是一种结构型设计模式,它允许接口不兼容的类之间进行合作。本…...
MySQL面试题系列-9
MySQL是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的RDBMS (Relational Database Management System,关系数据…...
书生·浦语训练营二期第二次笔记
文章目录 1. 部署 InternLM2-Chat-1.8B 模型进行智能对话1.1 配置环境1.2 下载 InternLM2-Chat-1.8B 模型 2. 实战:部署实战营优秀作品 八戒-Chat-1.8B 模型2.1 配置基础环境2.2 使用 git 命令来获得仓库内的 Demo 文件:2.3 下载运行 Chat-八戒 Demo 3. …...
python_3
文章目录 题目运行结果模式A模式B模式C模式D 题目 mode input("请选择模式:") n int(input("请输入数字:"))if mode "A" or mode "a":# 模式A n:输入的层数 i:当前的层数# 每行数字循环次数 ifor i in range(1, n 1):for j in r…...
【Python】 使用Apache Tika和Python实现zip、csv、xls等多格式文件文本内容提取
时间的电影 结局才知道 原来大人已没有童谣 最后的叮咛 最后的拥抱 我们红着眼笑 我们都要把自己照顾好 好到遗憾无法打扰 好好的生活 好好的变老 好好假装我 已经把你忘掉 🎵 五月天《好好》 在进行数据分析、搜索引擎优化或任何需要处理大量…...
C语言如何将多维数组名作为函数参数?
一、问题 ⼦函数执⾏时,整个多维数组是由主函数决定的,这时就要把多维数组的数组名作为函数参数传递给⼦函数。那么在C程序中,怎样将多维数组名作函数参数进⾏传递? 二、解答 以⼆维数组为例,其格式如下。 形参定义&…...
2013年认证杯SPSSPRO杯数学建模C题(第二阶段)公路运输业对于国内生产总值的影响分析全过程文档及程序
2013年认证杯SPSSPRO杯数学建模 C题 公路运输业对于国内生产总值的影响分析 原题再现: 交通运输作为国民经济的载体,沟通生产和消费,在经济发展中扮演着极其重要的角色。纵观几百年来交通运输与经济发展的相互关系,生产水平越高…...
《LeetCode力扣练习》代码随想录——二叉树(合并二叉树---Java)
《LeetCode力扣练习》代码随想录——二叉树(合并二叉树—Java) 刷题思路来源于 代码随想录 617. 合并二叉树 二叉树-前序遍历 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode…...
openstack云计算(二)——使用Packstack安装器安装一体化OpenStack云平台
初步掌握OpenStack快捷安装的方法。掌握OpenStack图形界面的基本操作。 一【准备阶段】 (1)准备一台能够安装OpenStack的实验用计算机,建议使用VMware虚拟机。 (2)该计算机应安装CentOS 7,建议采用CentO…...
Flutter Don‘t use ‘BuildContext‘s across async gaps.
Flutter提示Don‘t use ‘BuildContext‘s across async gaps.的解决办法—flutter里state的mounted属性...
基于SSM+Jsp+Mysql的个性化影片推荐系统
开发语言:Java框架:ssm技术:JSPJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包…...
循环队列的实现及应用——桶排序bucket_sort、基数排序radix_sort
一、循环队列的实现 代码解释 1、完成初始化 2、定义方法 3、测试实例 4、完整代码 class AQueue:def __init__(self, size=10):self.__mSize = sizeself.__front=0self.__rear = 0self.__listArray = [None] * size#清空元素def clear(self):self.__front = 0self.__rear =…...
ubuntu16如何使用高版本cmake
1.引言 最近在尝试ubuntu16.04下编译开源项目vsome,发现使用apt命令默认安装cmake的的版本太低。如下 最终得知,ubuntu16默认安装确实只能到3.5.1。解决办法只能是源码安装更高版本。 2.源码下载3.20 //定位到opt目录 cd /opt 下载 wget https://cmak…...
电商-广告投放效果分析(KMeans聚类、数据分析-pyhton数据分析
电商-广告投放效果分析(KMeans聚类、数据分析) 文章目录 电商-广告投放效果分析(KMeans聚类、数据分析)项目介绍数据数据维度概况数据13个维度介绍 导入库,加载数据数据审查相关性分析数据处理建立模型聚类结果特征分析…...
练习 16 Web [极客大挑战 2019]LoveSQL
extractvalue(1,concat(‘~’, (‘your sql’) ) )报错注入,注意爆破字段的时候表名有可能是table_name不是table_schema 有登录输入框 常规尝试一下 常规的万能密码,返回了一个“admin的密码”: Hello admin! Your password is…...
UniApp微信小程序分享页的‘回家’按钮:一个getCurrentPages()的巧妙应用
UniApp微信小程序分享页的智能导航设计:基于页面栈的优雅解决方案 在移动应用生态中,微信小程序因其轻量化和社交属性获得了广泛应用。作为开发者,我们经常面临一个看似简单却影响用户体验的核心问题:当用户通过分享链接进入小程序…...
收藏!8年传统后端转AI应用开发,2026年实战干货全拆解(小白/程序员必看)
本人做了8年传统后端开发,去年顶着30的年龄焦虑,果断跳出舒适圈,咬牙转型AI应用开发。这一年里,面试被面试官追问到哑口无言、项目落地踩遍各种坑、熬夜调试到凌晨都是常态,但所有付出都有回报:薪资直接上涨…...
双臂机器人Matlab仿真及程序源码
双臂机器人matlab仿真,程序源码,带注释,带轨迹规划。打开Matlab敲下第10086行机械臂仿真代码,突然发现让两个铁胳膊和谐共舞可比教人类小朋友握手难多了。今天就唠唠怎么用Matlab让双机械臂画出完美轨迹,重点看黄色告警…...
嵌入式软件分层架构设计与RTOS抽象实践
通用嵌入式软件架构分层设计实践指南1. 项目概述1.1 系统架构设计背景在嵌入式系统开发中,随着项目复杂度提升,代码组织混乱、可维护性差成为常见问题。特别是在使用STM32、GD32等主流单片机时,缺乏合理的软件分层设计会导致以下问题…...
WVP-GB28181-Pro:构建统一视频监控平台的技术指南
WVP-GB28181-Pro:构建统一视频监控平台的技术指南 【免费下载链接】wvp-GB28181-pro 项目地址: https://gitcode.com/GitHub_Trending/wv/wvp-GB28181-pro 在安防监控领域,企业和机构常常面临多品牌设备协议不兼容、系统扩展困难、运维成本高昂等…...
ESP32智能LED驱动库:RMT与SPI硬件加速原理
1. 项目概述 SmartLeds 是一个专为 ESP32 平台设计的轻量级、高性能智能 LED 驱动库,其核心目标是提供一种 简单、直观且硬件加速 的方式,统一控制多种主流可寻址 LED(Addressable LEDs)。该库并非基于通用 GPIO 模拟时序的软件…...
屏幕水印革命:在代码里嵌入反扫描图腾
引言:测试安全的隐形护盾在软件测试领域,敏感数据泄露如同悬顶之剑——测试用例、缺陷报告、核心算法一旦被非法截屏传播,轻则导致知识产权流失,重则引发商业灾难。传统防护手段(如权限管控)在手机拍照、截…...
FreeRTOS任务管理与调度机制详解
FreeRTOS任务管理深度解析1. 实时操作系统任务基础1.1 任务基本概念在实时操作系统(RTOS)中,任务是最基本的执行单元。每个实时应用可以作为一个独立的任务运行,具有以下特性:独立运行环境:每个任务拥有自己的运行上下文ÿ…...
Rust的trait对象大小与动态分发在虚函数表实现上的差异
Rust作为一门现代系统编程语言,其独特的trait对象和动态分发机制在性能与灵活性之间取得了巧妙平衡。与C等语言的虚函数表实现相比,Rust的trait对象在内存布局和分发逻辑上展现出显著差异,这些差异直接影响着程序的内存使用效率和运行时行为。…...
如何快速掌握云端几何计算:5步实现设计自动化革命
如何快速掌握云端几何计算:5步实现设计自动化革命 【免费下载链接】compute.rhino3d REST geometry server based on RhinoCommon and headless Rhino 项目地址: https://gitcode.com/gh_mirrors/co/compute.rhino3d Rhino Compute是基于RhinoCommon和无头Rh…...
