【问题标题】:Is it possible to create a MingW / MSYS based Windows toolchain to compile Glibc dependent applications for Linux?是否可以创建基于 MingW / MSYS 的 Windows 工具链来为 Linux 编译依赖于 Glibc 的应用程序?
【发布时间】:2016-10-25 00:45:18
【问题描述】:

我按照 herehere 的说明构建了一个可以在 Windows 上运行并为 Linux 和不同硬件平台编译应用程序的工具链。起初我尝试为 i686-linux 创建交叉编译器,以便在通用 Debian 8 系统上对其进行测试。

Binutils 和 GCC 编译得很好,但我被 Glibc 卡住了。它告诉我:

*** The GNU C library is currently not available for this platform.

我看到 Sysprogs 工具链使用的是 Newlib 而不是 Glibc,但除了 Newlib 是嵌入式设备的不错选择之外,我没有找到任何解释。

这是否意味着 Newlib 实际上是 Windows -> Linux 的唯一选择,并且没有办法编译依赖于 Glibc 的软件?也许有“作弊”,比如从目标平台复制预构建的 Glibc 或其他一些解决方法?

理论上,我什至不需要在 Windows 上构建 Glibc,我只需要为目标架构构建的一些“Glibc 兼容存根”在为目标平台和操作系统编译时链接(当然只是动态地)。还是我在这里完全错了,GCC 不能链接到与 GCC 本身链接的不同的 C 库?

或者我应该忘记它并接受这样一个事实,即不可能(而且很可能永远不可能)实现从 Windows 到 GNU/Linux 的完全 Glibc 和 Linux 内核兼容的 C/C++ 交叉编译?

我将接受解释 GCC 和 Glibc 是如何相关的答案,以及是否有可能链接到与构建 GCC 本身时使用的 C 库不同的 Glibc,并提供一些关于它为什么/不可能的见解.

【问题讨论】:

  • 看在上帝的份上,你为什么要这个
  • 主要是因为我和我的同事已经习惯了 Visual Studio,它有很好的代码编辑器和调试器(最近还增加了对远程 GDB 调试的支持)。为整个团队学习在 Linux 上进行开发需要花费太多时间。当然,最终构建可以在目标机器上完成,无论如何我们都需要有经验的 Linux 开发人员,但对于整个团队来说,使用熟悉的开发工具会更方便。
  • 我在 Windows 和 C 方面有多年的经验。这是一个糟糕的主意,你在问什么。您敢于将 Windows 放在开发链中的任何位置的唯一原因是您正在开发 FOR Windows。请,为了一切都好,不要让自己头疼,不要这样做。用 Linux 构建 Linux 工具

标签: windows mingw cross-compiling glibc


【解决方案1】:

我猜你在构建 glibc 时使用了 --target,而你确实需要使用 --host(这与配置 newlib 的方式不同——最好不要问为什么)。

也就是说,glibc 构建系统需要一个区分大小写的文件系统,因为它会创建像 foo.oSfoo.os 这样的文件,它们是非常不同的东西。在像 Windows 这样的系统上,这意味着构建将被破坏并失败,因为 foo.oSfoo.os 引用同一个文件。有一些补丁可以解决这个问题,但实际上你最好启动虚拟机并在其中构建工具链。

注意:我并不是说您需要 VM 来完成所有开发工作。你只需要虚拟机来构建你在 Windows 下运行的交叉编译器。这将是一个canadian cross 构建。

与其自己动手,不如查看crosstool-ng。它处理/修补/修复人们在尝试创建交叉编译器时犯的许多常见错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-06
    • 1970-01-01
    • 2017-02-07
    • 2017-06-14
    • 2019-12-11
    • 2020-09-27
    • 1970-01-01
    相关资源
    最近更新 更多