首页 > 解决方案 > 使用 Buildroot 2019.05 构建 glibc 交叉编译器

问题描述

我想以二进制格式分发我的应用程序。然而,当我在 Fedora 30(它有 glibc-2.29)上编译时,我的二进制和必需的依赖项对 glibc-2.29 中的符号有多个引用。似乎有太多无法有效(并且发生在系统依赖关系深处)使用以下内容:

__asm__(".symver logf,logf@GLIBC_2.2.5");

因此,我一直在尝试构建一个 glibc 交叉编译器。由于我需要编译很多依赖项(Xorg、OpenGL 等),我认为使用Buildroot会更容易。不幸的是,Buildroot 2019.05 似乎自动使用 glibc-2.29,而且似乎没有选项make menuconfig可以改变它。

有没有办法强制 Buildroot 使用 glibc-2.24?我更希望不必在跟踪旧 glibc 的发行版上进行编译。

标签: linuxglibcbuildroot

解决方案


解决方案1:

使用最初用于生成应用程序必须运行的根文件系统(或分发版)的工具链。

这样,您将拥有相同的 glibc 版本所有其他库的相同版本。

解决方案2:

静态构建您的应用程序。但是您必须检查客户端/服务器组件(例如 Xorg)是否可以与不同于客户端版本的服务器版本一起使用。

其他解决方案:

如果这些都不可能,您可能想尝试以下方法之一:

  • 使用 Buildroot 2017.08。Glibc 在 2017.11 被撞到了 2.26。
  • 使用Crosstool-NG构建一个工具链,它支持许多 glibc 版本,然后在 Buildroot 中将其用作外部工具链并构建您需要的所有库。

但是他们可能会增加比解决的问题更多的问题,因为您仍然需要找到一个 Buildroot 版本,该版本的所有库都与您的目标兼容。


推荐阅读