做回标题党
参考
介绍情况吧
在高版本gcc 环境下编译并正常运行
迁移低版本之后出现经典报错
/lib64/libc.so.6: versionGLIBC_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.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