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 

    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); 
    }

再顺便讲讲静态库 动态库 静态链接 动态链接
静态库 和动态库
静态链接 和动态链接
注意静态链接 依赖少
动态库依赖多
所以在跨版本 可以多往静态链接 这个方向去靠
但是呢 静态链接 相当于打包全家桶 所以占用的控件要多一些
glibc | `GLIBC_2.14‘ not found | libstdc++.so.6: version `GLIBCXX_3.4.17‘ |-static-libstdc++静态链接_第1张图片
https://blog.csdn.net/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

你可能感兴趣的:(C++,linux,综合部,c++,java,开发语言)