我最近在Ubuntu服务器上编译了一个二进制文件并分发了它。这是用户遇到的错误:减少所需的libc版本
Failed (/lib32/libc.so.6: version `GLIBC_2.17' not found
有关如何解决它的任何想法?我之前使用过另一个Linux发行版(CentOS 6),它工作正常(对我和其他用户而言)。
我该如何解决?
我最近在Ubuntu服务器上编译了一个二进制文件并分发了它。这是用户遇到的错误:减少所需的libc版本
Failed (/lib32/libc.so.6: version `GLIBC_2.17' not found
有关如何解决它的任何想法?我之前使用过另一个Linux发行版(CentOS 6),它工作正常(对我和其他用户而言)。
我该如何解决?
如果你想使用新的图书馆,你有两个选择
你可以静态链接到g ++使用-static-libgcc -static-libstdc++ -static
这应该是几乎静态链接的一切,但会扩大你的二进制文件。
使用RPATH的-rpath
连接选项的另一种选择,可以通过像这样:
-Wl,-rpath,$PATH
的东西,如库或者只是更换$ PATH。对于与二进制文件相同的目录,通过这种方式,生成的ELF(可执行文件)的头文件将知道在哪里查找所需的共享库,并且只需使用二进制文件重新分发共享库。
否则,您可以编译并链接到目标机器上支持的版本。
您需要在构建可执行文件时静态链接gblic。 请参阅Link glibc statically but some other library dynamically with GCC
或者让用户安装GLIBC_2.17。
最简单的解决方案是建立在您想要支持的最古老的系统上。
静态链接libstdC++有什么缺点吗? – TheBlackTiger
@TheBlackTiger是的,可执行文件的大小,加载速度,使用的内存,缺乏安全更新。 –
@TheBlackTiger是的,你失去了共享库的所有好处,例如共享库的代码可以通过多个进程在内存中共享,从而节省系统内存,并且如果存在向后兼容的新版本,则应用程序将使用该版本可能是错误修复/性能增益) –