减少所需的libc版本
Reducing the version of libc required
我最近在Ubuntu服务器上编译了一个二进制文件并分发了它。这是用户遇到的错误:
Failed (/lib32/libc.so.6: version `GLIBC_2.17' not found
有什么解决办法吗?我以前使用过另一个Linux发行版(centos6),它运行良好(对我和其他用户来说)。
我该怎么修?
最简单的解决方案是在您想要支持的最旧系统上构建。
如果你想使用更新的库,你有两个选项
- 静态链接libstdc++
- 使用二进制文件分发您的库版本,并在链接时使用RPATH
您可以使用-static-libgcc -static-libstdc++ -static
与g++静态链接,这应该会静态链接所有内容,但会放大您的二进制文件。
另一个选项是使用RPATH,-rpath
链接器选项可以这样传递:
-Wl,-rpath,$PATH
用类似libs的东西替换$PATH,或者只是。对于和二进制文件相同的目录,通过这种方式生成的ELF(可执行文件)的头将知道在哪里查找所需的共享库,并且您可以使用二进制文件重新分发共享库。
否则,您可以编译并链接到目标计算机上支持的版本。
相关文章:
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 导入库可以跨dll版本工作吗
- 在调用FreeLibrary后,释放动态链接到具有相同版本的CRT堆的DLL的内存
- 在clang++预处理器中确定gcc工具链版本
- 码头化的C++应用程序是否向后兼容早期的内核版本
- 带有 -stdlib=libc++ 的 clang++ 9.0.1 找不到<optional>
- 不同的Visual Studio版本中缺少.dll
- 用符号版本替换对函数的所有调用
- luaL_dofile在已知良好的字节码上失败,可以使用未编译的版本
- 正在解码MSVC 32位版本的程序集(作业).没有手术做什么
- 我需要分发哪些版本的可再分发文件
- CV_OCL_RUN宏如何在OpenCV(版本3.4.5)的goodFeaturesToTrack实现中工作?
- 在clang的travis上使用不同的libc++版本
- MacOS中的LIBC 的如何使用(链接)调试版本
- 如何在使用旧版本gcc的系统上动态链接到libc.so.6、libstdc++.so.6的本地副本
- /lib64/libc.so.6 的标准解决方案:未找到版本"GLIBC_2.14"
- 减少所需的libc版本
- 如何链接GCC中的libc和libstdc++的调试版本
- [链接libc.so.6/libstdc++.so.][使用旧版本]
- C : /lib64/libc.so.6:找不到版本"GLIBC_2.11"(C 需要)