glibc | `GLIBC_2.14‘ not found | libstdc++.so.6: version `GLIBCXX_3.4.17‘ |-static-libstdc++静态链接

做回标题党
参考

介绍情况吧
在高版本gcc 环境下编译并正常运行
迁移低版本之后出现经典报错
/lib64/libc.so.6: version GLIBC_2.14' not found /usr/lib64/libstdc++.so.6: version GLIBCXX_3.4.17’ not found
/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.19’ not found
……

原因在低版本gcc 环境中的libc动态库中缺少 没找到GLIBC_2.14 版本
因为这是高版本
可以使用strings 命令
strings /lib64/libc.so.6 | grep GLIBCXX_3.
以及命令objdump
objdump -T /lib64/libc.so.6 | fgrep GLIBCXX_3.
(可以去百度一下,这两个命令 是对二进制文件进行搜索用的)

解决方案针对出现 GLIBC_2.14 可以使用 memcpy 大致就是更改C库的版本号 (不适用/lib64/libc.so.6 这条 也就是c++的动态库)

//写一个 memcpy.c文件 然后编译成memcpy.o
//参考	gcc -c ./memcpy.c

//链接 自己的 项目 
//参考	./memcpy.o 

//重点  
//后面c++ 动态库链接找不到 新版本  干脆 静态链接 libc++
//参考 -static-libstdc++					注意中间  没有空格

#include <string.h>

    void *__memcpy_old(void *, const void *, size_t);

    asm(".symver __memcpy_old, memcpy@GLIBC_2.2.5");

    void *__wrap_memcpy(void *dest, const void *src, size_t n){
        return __memcpy_old(dest, src, n); 
    }

再顺便讲讲静态库 动态库 静态链接 动态链接
静态库 和动态库
静态链接 和动态链接
注意静态链接 依赖少
动态库依赖多
所以在跨版本 可以多往静态链接 这个方向去靠
但是呢 静态链接 相当于打包全家桶 所以占用的控件要多一些
在这里插入图片描述
https://blog.youkuaiyun.com/m0_64388758/article/details/128643671?ops_request_misc=&request_id=&biz_id=102&utm_term=%E9%9D%99%E6%80%81%E5%BA%93%E3%80%81%E9%9D%99%E6%80%81%E9%93%BE%E6%8E%A5&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-3-128643671.142v96pc_search_result_base7&spm=1018.2226.3001.4187

<think>我们正在解决VSCode远程连接时出现的"remotehostdoesnotmeetVSCodeserverprerequisites"错误,该错误通常与glibclibstdc++版本过低有关。以下步骤将帮助您诊断和解决此问题。</think>### VS Code远程主机GLIBC/Libstdc++版本不足解决方案 当遇到"remote host does not meet VS Code server prerequisites"错误时,通常是由于远程主机上的**GLIBC(GNU C库)**或**Libstdc++C++标准库)**版本过低导致。以下是系统化的解决方案: #### 1. 诊断版本问题 首先通过SSH连接远程主机并检查关键库版本: ```bash # 检查GLIBC版本 $ ldd --version | head -n1 # 检查Libstdc++版本 $ strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX ``` VS Code远程开发要求至少**GLIBC 2.17+**和**Libstdc++.so.6.0.17+**。如果输出显示最高版本号低于要求(如`GLIBCXX_3.4.17`),则需升级[^1]。 #### 2. 解决方案A:升级系统库(推荐) ```bash # CentOS/RHEL $ sudo yum update glibc libstdc++ # Ubuntu/Debian $ sudo apt update && sudo apt install libc6 libstdc++6 ``` 升级后重启远程主机:`sudo reboot` #### 3. 解决方案B:手动安装新版Libstdc++ 当系统仓库无更新时(常见于旧版CentOS): ```bash $ wget http://mirror.centos.org/centos/7/sclo/x86_64/rh/devtoolset-8-libstdc++-devel-8.3.1-3.el7.x86_64.rpm $ sudo rpm -Uvh devtoolset-8*.rpm $ sudo ln -sf /opt/rh/devtoolset-8/root/usr/lib64/libstdc++.so.6.0.25 /usr/lib64/libstdc++.so.6 ``` 验证链接:`ls -l /usr/lib64/libstdc++.so.6` #### 4. 解决方案C:使用Docker容器 若无法修改主机环境,可在远程主机创建兼容容器: ```Dockerfile FROM ubuntu:18.04 # 自带GLIBC 2.27 RUN apt update && apt install -y openssh-server EXPOSE 22 CMD ["/usr/sbin/sshd", "-D"] ``` 在VS Code中连接时选择"Attach to Container"而非SSH。 #### 5. 验证修复 升级后重新启动VS Code远程连接,或手动触发服务端安装: ```bash $ rm -rf ~/.vscode-server # 清除旧安装 $ ssh [host] "curl -kL https://update.code.visualstudio.com/latest/server-linux-x64 | tar -xz" ``` > **重要提示**:GLIBC是系统核心组件,错误升级可能导致系统崩溃。生产环境建议先在测试机验证[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值