【发布时间】:2016-10-25 00:45:18
【问题描述】:
我按照 here 和 here 的说明构建了一个可以在 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