我正在运行GLIBC 2.12版本中的代码时出现此错误,该版本在2.19中编译。这个问题的标准解决方案是什么,因此代码可以在所有版本中运行。将目标机器升级到2.19不是一个选项,因为该软件应该在至少5000台机器上运行。将开发机器分级为2.12也不是一个合适的解决方案。因为2.19只是一个例子。 5000台目标机器可以有任何版本。这是什么标准解决方案?无论如何静态编译?我的意思是将整个GLIBC与代码捆绑在一起。
答案 0 :(得分:4)
最简单的解决方案是简单地创建一个用于生产版本的“构建服务器”,并将此服务器保留在您需要支持的最旧版本上,包括glibc。
如果您不想使用物理机,可以使用开发服务器中的VM来完成。
答案 1 :(得分:0)
针对glibc编译的Bbinaries应该是向前兼容的;你针对glibc 2.19编译的二进制文件使用的是2.14版本中出现的API版本。相反,如果您针对2.12进行编译,它也应该在运行时使用Glibc 2.19。
在Python-land中,他们现在提供基于Centos 5.11 Docker镜像构建的预构建Linux C扩展; The PEP 0513 explains details。他们似乎在那里工作得很好。 Centos 5.11似乎有glibc 2.5; Centos 6有glibc 2.12。我自己在Ubuntu 14.04和15.10上使用这些预先构建的.so
而没有任何问题。
答案 2 :(得分:0)
还有一个非常糟糕的解决方案,将所需的libc.so
(2.19)文件放在特定目录中(只需将其复制),创建一个跑步者脚本,将LD_LIBRARY_PATH
设置为拥有特定目录,然后运行可执行文件。系统应该从系统提供的目录之前的特定目录中获取libc.so,因此它应该可以工作。