linux - 使用 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 的发行版上进行编译。
解决方案
解决方案1:
使用最初用于生成应用程序必须运行的根文件系统(或分发版)的工具链。
这样,您将拥有相同的 glibc 版本和所有其他库的相同版本。
解决方案2:
静态构建您的应用程序。但是您必须检查客户端/服务器组件(例如 Xorg)是否可以与不同于客户端版本的服务器版本一起使用。
其他解决方案:
如果这些都不可能,您可能想尝试以下方法之一:
- 使用 Buildroot 2017.08。Glibc 在 2017.11 被撞到了 2.26。
- 使用Crosstool-NG构建一个工具链,它支持许多 glibc 版本,然后在 Buildroot 中将其用作外部工具链并构建您需要的所有库。
但是他们可能会增加比解决的问题更多的问题,因为您仍然需要找到一个 Buildroot 版本,该版本的所有库都与您的目标兼容。
推荐阅读
- powerbi - 尝试在 Dax 中存储天数但收到错误消息 - MAX 函数仅接受列引用作为参数编号 1
- java - Kotlin 参数注释在函数注释之前被调用
- r - 使用列范围或选择模式计算的(逐行)列
- node.js - 异步函数返回空数组
- excel - 在 VBA 中用 Edge 替换 IE 位
- monitoring - 使用通配符的流入计数器聚合
- java - Spring Initializr gradle 项目失败未知属性'compileConfigurationName'
- javascript - 带有向上和向下箭头的 ngb 时间选择器问题
- r - 删除R中组之间的重复项
- conda - 如何像 conda 一样使用 pyenv?