安装DFINITY及其软件开发包SDK(一):出现GLIBC_2.29 not found 解决办法

本文讲述了作者在Windows 11子系统中使用Ubuntu 20.04解决Dfinity开发中GLIBC版本问题的过程,涉及库缺失、编译失败及VSCode权限设置等关键步骤。

说在前面

作者入门Dfinity开发根据以下文档,先致敬维护中文文档的大佬
https://shuzhichengspace.gitbook.io/dfinity/yi-kuai-su-ru-men/1.-ben-di-kai-fa-1

正常安装win11的子系统linux后,我首先尝试了ubuntu18.04LTS版本
发现安装了dfx后缺少库如下所示:请添加图片描述
安装时参考以下包括但不限于以下几篇文章:
https://www.cnblogs.com/clairedandan/p/13811745.html
https://www.jianshu.com/p/5bb21028cde1
https://www.jianshu.com/p/92c7a042d8ba
然后安装了一早上GLIBC_2.29版本之后,发现总是编译失败(在ubuntu18.04上我没编译成功)

后来群里大佬说换成ubuntu20.04版本就可以了,或者自己手动编译(这里作者直接换了ubuntu20.04版本。
以下是群里大佬给的一些提示:
请添加图片描述
https://www.linuxfromscratch.org/lfs/view/9.0-systemd/chapter05/glibc.html

正式开始

在这里插入图片描述
作者的开发环境:win11子系统linux(ubuntu20.04)+ vscode插件:Remote - WSL
vscode是安装在win11系统上,用了remote-wsl插件后
在这里插入图片描述
先点绿色的地方,然后new一个WSL window就可以把vscode连接在win11子系统的unbuntu上,因为我只是安装了一个ubuntu,默认会选择这个,如果是安装了多个子系统,应该是可以选择的,但作者并未涉及就不多介绍。

vscode权限不足的问题

用vscode保存代码会出现权限不足的情况,简单粗暴的办法就是把文件夹权限直接改成777就行
比如我在home/xiaoc/code这个文件夹下做开发

chmod 777-R /home/xiaoc/code

直接开放子文件夹与子文件全部权限即可

/home/yzf/env/toolchain/bin/../lib/gcc/aarch64-openwrt-linux-gnu/12.3.0/../../../../aarch64-openwrt-linux-gnu/bin/ld: warning: libm.so.6, needed by ./.libs/libxml2.so, not found (try using -rpath or -rpath-link) /home/yzf/env/toolchain/bin/../lib/gcc/aarch64-openwrt-linux-gnu/12.3.0/../../../../aarch64-openwrt-linux-gnu/bin/ld: warning: libm.so.6, needed by ./.libs/libxml2.so, not found (try using -rpath or -rpath-link) /home/yzf/env/toolchain/bin/../lib/gcc/aarch64-openwrt-linux-gnu/12.3.0/../../../../aarch64-openwrt-linux-gnu/bin/ld: ./.libs/libxml2.so: undefined reference to `log10@GLIBC_2.17' /home/yzf/env/toolchain/bin/../lib/gcc/aarch64-openwrt-linux-gnu/12.3.0/../../../../aarch64-openwrt-linux-gnu/bin/ld: ./.libs/libxml2.so: undefined reference to `pow@GLIBC_2.29' /home/yzf/env/toolchain/bin/../lib/gcc/aarch64-openwrt-linux-gnu/12.3.0/../../../../aarch64-openwrt-linux-gnu/bin/ld: ./.libs/libxml2.so: undefined reference to `fmod@GLIBC_2.38' collect2: error: ld returned 1 exit status /home/yzf/env/toolchain/bin/../lib/gcc/aarch64-openwrt-linux-gnu/12.3.0/../../../../aarch64-openwrt-linux-gnu/bin/ld: ./.libs/libxml2.so: undefined reference to `log10@GLIBC_2.17' /home/yzf/env/toolchain/bin/../lib/gcc/aarch64-openwrt-linux-gnu/12.3.0/../../../../aarch64-openwrt-linux-gnu/bin/ld: ./.libs/libxml2.so: undefined reference to `pow@GLIBC_2.29' /home/yzf/env/toolchain/bin/../lib/gcc/aarch64-openwrt-linux-gnu/12.3.0/../../../../aarch64-openwrt-linux-gnu/bin/ld: ./.libs/libxml2.so: undefined reference to `fmod@GLIBC_2.38'
最新发布
11-14
前端打过程中出现 `/lib64/libm.so.6: version 'GLIBC_2.29' not found` 错误,通常是因为构建环境中的 GNU C Library (glibc) 版本低于程序所依赖的版本。此类问题常见于基于 Linux 的系统,例如 CentOS 7 或 Ubuntu 20.04,它们默认提供的 glibc 版本较低,无法满足某些依赖高版本 glibc 的二进制文件或库的需求。 ### 解决方案 #### 1. **升级 glibc** 可以手动编译安装更高版本的 glibc(如 2.29 或更高),但需注意该操作涉及系统底层库,存在定的风险,建议在测试环境中先行验证。 **步骤如下:** - 下载 glibc 2.29 源码: ```bash wget http://ftp.gnu.org/gnu/glibc/glibc-2.29.tar.gz ``` - 解压并进入源码目录: ```bash tar -zxvf glibc-2.29.tar.gz cd glibc-2.29 ``` - 创建构建目录并配置安装路径: ```bash mkdir build && cd build ../configure --prefix=/usr/local/glibc-2.29 ``` - 编译并安装: ```bash make -j$(nproc) sudo make install ``` - 替换系统 `libm.so.6` 链接(谨慎操作): ```bash sudo ln -sf /usr/local/glibc-2.29/lib/libm-2.29.so /lib64/libm.so.6 ``` #### 2. **使用兼容版本的依赖** 如果升级 glibc 不可行,可以尝试降低依赖库或工具链的版本。例如,如果错误由某个特定版本的 Python 或第三方库(如 DearPyGui)引发,可以安装个与当前 glibc 版本兼容的版本。 #### 3. **使用容器化技术** 使用 Docker 等容器化技术可以避免直接修改系统 glibc。通过构建含所需 glibc 版本的容器镜像,可以在不影响主机环境的前提下运行前端打流程。 **示例 Dockerfile:** ```dockerfile FROM ubuntu:20.04 # 安装依赖 RUN apt-get update && apt-get install -y \ build-essential \ wget \ libgl1 \ && rm -rf /var/lib/apt/lists/* # 安装 glibc 2.29 RUN wget http://ftp.gnu.org/gnu/glibc/glibc-2.29.tar.gz && \ tar -zxvf glibc-2.29.tar.gz && \ cd glibc-2.29 && \ mkdir build && cd build && \ ../configure --prefix=/usr/local/glibc-2.29 && \ make -j$(nproc) && \ sudo make install && \ sudo ln -sf /usr/local/glibc-2.29/lib/libm-2.29.so /lib/x86_64-linux-gnu/libm.so.6 # 设置工作目录并运行构建命令 WORKDIR /app COPY . . RUN npm run build ``` #### 4. **静态链接** 如果打工具支持,可以选择静态链接方式,避免动态依赖 glibc。这种方式可显著减少运行时依赖问题,但会增加最终二进制文件的体积。 ### 注意事项 - 升级 glibc 可能会影响系统的稳定性,因为许多系统组件依赖于 glibc。 - 建议在升级前备份系统或创建快照。 - 若使用容器,则需确保容器镜像与目标运行环境兼容。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值