2013-06-30 40 views
2

我最近在Ubuntu服务器上编译了一个二进制文件并分发了它。这是用户遇到的错误:减少所需的libc版本

Failed (/lib32/libc.so.6: version `GLIBC_2.17' not found 

有关如何解决它的任何想法?我之前使用过另一个Linux发行版(CentOS 6),它工作正常(对我和其他用户而言)。

我该如何解决?

回答

2

如果你想使用新的图书馆,你有两个选择

  1. 静态链接的libstdC++。
  2. 使用二进制文件分发您的库版本,并在链接时使用RPATH。

你可以静态链接到g ++使用-static-libgcc -static-libstdc++ -static这应该是几乎静态链接的一切,但会扩大你的二进制文件。

使用RPATH的-rpath连接选项的另一种选择,可以通过像这样:

-Wl,-rpath,$PATH的东西,如库或者只是更换$ PATH。对于与二进制文件相同的目录,通过这种方式,生成的ELF(可执行文件)的头文件将知道在哪里查找所需的共享库,并且只需使用二进制文件重新分发共享库。

否则,您可以编译并链接到目标机器上支持的版本。

+0

静态链接libstdC++有什么缺点吗? – TheBlackTiger

+0

@TheBlackTiger是的,可执行文件的大小,加载速度,使用的内存,缺乏安全更新。 –

+0

@TheBlackTiger是的,你失去了共享库的所有好处,例如共享库的代码可以通过多个进程在内存中共享,从而节省系统内存,并且如果存在向后兼容的新版本,则应用程序将使用该版本可能是错误修复/性能增益) –

1

最简单的解决方案是建立在您想要支持的最古老的系统上。