关于version `GLIBC_2.34‘ not found解决办法(非升级glibc库或Linux系统)

关于version `GLIBC_2.34’ not found解决办法

原文地址:Rain的小破站 | 关于version `GLIBC_2.34’ not found解决办法

问题来源

源代码

#include "stdio.h"

void main(void)
{
    printf("Hello World!");
}

使用arm-linux-gnueabihf-gcc交叉编译

arm-linux-gnueabihf-gcc main.c -o main

部署到开发板后运行报错

debian@npi:~$ ./main 
./main: /lib/arm-linux-gnueabihf/libc.so.6: version `GLIBC_2.34' not found (required by ./main)

查询资料

使用bing和百度搜索 version `GLIBC_2.34’ not found 得到的解决办法归纳为一下几点

  • 升级部署环境系统版本,降低打包编译环境的系统版本
  • 在部署环境中下载符合版本的gblc库(一般高于原来的环境)
  • 使用工具gblc-all-in-one文档描述是

这是一个在ubuntu环境下随意更改文件glibc版本的便捷工具

  • 使用静态链接库

    方法一:可以完美解决,但是太傻了,作为开发人员总不能每次开发一个系统就换自己系统的版本吧。
    方法二:看运气,说不定升级了以后开发板的系统命令就用不了了,所以不建议随意升级这个库,具体原因可以
    自行百度。
    方法三:没看懂原理(刚入门)所以也没去尝试。
    方法四:使用静态链接库,缺点是不确定以后会不会出什么问题,而且编译后的文件体积巨大。

整理思路

我查询了交叉编译的指令具体和GCC差不了多少其中有一 -l-L 命令。用于指定链接库的链接目录。具体用法参见GCC -l选项:手动添加链接库,所以我想能不能在编译的的时候指定需要链接的库或目录,这样就不会需要改变双方的环境了。


解决步骤

查找网络发现在编译c语言时候需要用到的库为libc
我不使用编译器自带的而是从开发板上下载了该文件作为编译文件的链接库。
然后在编译的时候指定该文件作为链接目标。

yhw@yhw-virtual-machine:~/gxl$ scp laojia:/lib/libc.so.6 ./   # 从开发板(服务器)系统的/lib目录下找到libc.so.6下载到当前目录
yhw@yhw-virtual-machine:~/gxl$ arm-linux-gnueabihf-gcc main.c -o main ./libc.so.6 #指定刚刚下载的libc.so.6文件作为编译时候链接文件

然后将程序部署到开发板环境运行成功

debian@npi:~$ ./main #运行
Hello World!
debian@npi:

而后尝试用指令-L指定一个目录让编译器从其中查找链接库,这样不用一个一个的输入文件。

yhw@yhw-virtual-machine:~/gxl$ arm-linux-gnueabihf-gcc main.c -o main -L ./lib_dir/ #自行创建文件夹并将文件移入后再执行此步骤

编译通过,完美解决。


总结

使用编译器-l-L选项手动添加从目标系统下载的链接库从而解决gblc版本不匹配的问题。

  • 14
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
引用[1]、[2]、[3]中提到的错误提示"/lib/libc.so.6: version `GLIBC_2.34' not found"是由于缺少GLIBC的版本2.34导致的。GLIBC是GNU C,它是Linux系统中的一个重要组件,提供了许多标准的C函数。不同的应用程序可能需要不同版本的GLIBC来正常运行。 要解决这个问题,你可以尝试以下几种方法: 1. 更新GLIBC:你可以尝试更新GLIBC到最新版本,以满足应用程序对GLIBC_2.34版本的要求。你可以通过更新操作系统或手动安装GLIBC的最新版本来实现。 2. 编译应用程序:如果你有应用程序的源代码,你可以尝试在目标系统上重新编译应用程序,以适应当前可用的GLIBC版本。在编译过程中,确保使用目标系统上可用的GLIBC版本。 3. 兼容性处理:如果你无法更新GLIBC或重新编译应用程序,你可以尝试使用兼容性处理方法。这可能包括使用chroot环境、容器化技术或其他方法来创建一个与目标系统不同的环境,以满足应用程序对GLIBC版本的要求。 需要注意的是,GLIBC的版本问题可能涉及到系统的稳定性和兼容性。在进行任何更改之前,请确保你了解可能的风险,并备份重要的数据和配置文件。 总结起来,要解决"/lib/libc.so.6: version `GLIBC_2.34' not found"的问题,你可以尝试更新GLIBC、重新编译应用程序或使用兼容性处理方法。具体的解决方法取决于你的系统和应用程序的具体情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值