在linux中分发针对非标准glibc编译的C程序需要什么(即glibc 2.24)?

时间:2016-08-11 10:37:21

标签: c linux shared-libraries glibc libc

我刚刚发现,glibc 2.23有一个关于stdio函数fmemopen()的bug,参见例如Using rewind() on a FILE* opened with fmemopen。 (描述的错误行为不是唯一的。如果缓冲区的大小超过8192字节,问题会变得更多......)

现在我正在考虑使用新发布的glibc 2.24,它修复了这个bug。但是,我的目标用户环境是Ubuntu计算机,我想它仍然需要一些时间,直到Ubuntu支持glibc 2.24开箱即用。

那么,当我尝试分发代码时,我会遇到什么问题?

或者,一些相关的问题:

  • 我什么时候可以预期Ubuntu会支持glibc 2.24?
  • 系统中是否可以有两个libc版本?
  • 是否可以静态链接libc?
  • 的确,我只需要stdio部分。是否可以仅使用2.24中的stdio,这会带来任何好处吗?

1 个答案:

答案 0 :(得分:2)

  

我什么时候可以预期Ubuntu会支持glibc 2.24?

Ubuntu已经发布了版本16.04与GLIBC-2.23 link。您可以预期下一个LTS版本将在2年内发布。即使这样,您也可以期望您的客户在未来5年内没有最新版本。

  

系统中是否可以有两个libc版本?

是的,请参阅this answer。然而,这并不是一个微不足道的主张,大多数理智的客户都不愿意想要建立一个单独的GLIBC,他们需要自己构建并保持修补(如果你想简单地给他们一个预建的副本,你就是疯了^ H ^ H不明白你要注册的是什么。

  

是否可以静态链接libc?

也许。如果您的应用程序使用NSS(gethostbyname等;大多数非平凡的应用程序都可以),那么即使是静态链接的应用程序也行不通(您将收到类似this one的链接时警告。)

  

确实,我只需要stdio部分。是否可以仅使用2.24中的stdio,这会带来任何好处吗?

您无法轻易地将stdio与其他人区分开来。即使你设法生成一个有效的二进制文件,它正确的可能性也很小。