在 Windows 上运行并生成 Linux 代码的 C++ 编译器

Posted

技术标签:

【中文标题】在 Windows 上运行并生成 Linux 代码的 C++ 编译器【英文标题】:C++ compiler that runs on windows and generates Linux code 【发布时间】:2010-12-22 19:24:17 【问题描述】:

我只是好奇这是否可行: 有没有在windows上运行并且可以生成Linux代码的C++编译器?

【问题讨论】:

g++ installed in Cygwin 可能可以做到,但我不确定。 可以进行交叉编译,是的。另一个问题是 Windows 上是否有易于安装/可配置的交叉编译器。你为什么需要这个?考虑到 (1) linux 上的通常过程是从源代码编译(到分发二进制文件的地步,除非由包管理器跟踪,否则会皱眉头)和 (2) 如果你真的需要这样做,你可以总是用一些 linux 设置一个虚拟机并在那里编译。 Linux 这个词有点太笼统了。您需要指定硬件和(特定)操作系统(及其版本)以获得正确的 X-Compiler。它不是微不足道的,而是可行的。 【参考方案1】:

g++ 交叉编译器可以做到这一点。

见http://metamod-p.sourceforge.net/cross-compiling.on.windows.for.linux.html

【讨论】:

这些有点过时了,但这是正确的想法:只需设置一个交叉编译器,其中 CBUILD=w32(或 cygwin)和 CTARGET=linux。【参考方案2】:

绝对有可能。您需要一个可以处理交叉编译然后指定目标的编译器。关键是要获得一个能够以目标系统所需的方式创建二进制文件的编译器。 g++ 会为您做到这一点。

我参与了一个项目,我们使用 linux 使用他们的 C 编译器创建嵌入式 arm 可执行文件,然后使用 scp 将其复制过来进行测试。

【讨论】:

是的,使用 windows 主机为嵌入式 linux 系统开发可能是最常见的情况。【参考方案3】:

是的,这是可能的,但为什么要麻烦呢?存在设置错误并获得无法正常工作的二进制文件的风险。

此外,您还需要安装 vmware**,以便测试生成的二进制文件 - 您将运行全面测试,不是吗?

只需设置另一个 VM 来进行构建(因为当然,您需要测试它是否可以在没有安装构建工具的机器上工作)。

** 其他虚拟化平台可用,这不是商业用途。

【讨论】:

如果您有只能在一个平台上运行的开发工具,但您想为另一个平台生成二进制文件,那么这绝对是值得的。我参与了一个项目,其中开发套件仅在 Windows 上运行,但我们针对的是一组其他操作系统,包括 Linux。交叉编译显着减少了测试更改所需的时间。 使用 VM 是迄今为止最简单、最强大的解决方案,并且允许在多个 Linux 发行版上进行测试。值得注意的是,由于 VM 可以通过与主机的虚拟网络连接进行文件共享,因此可以结合使用 Windows 和 Linux 工具进行开发和源代码管理 @Clifford - 不一定。如果他们在不可移植的基于 Windows 的综合构建系统上投入了大量资金,那么从他们的源代码工作副本在那里构建一个 linux 版本,然后将二进制文件推送到测试盒或 vm 上可能会更好。尤其是网络共享源文件夹的增量构建很容易变得非常糟糕,如果不同机器的时钟没有与同一个网络时间源紧密同步。 @Chris:我并不是说它一定是一个无缝的工作流,只是如果你想在 Visual Studio 中编写代码,但在 Linux 上编译它,这是可能的。关于时钟偏差,主机和虚拟机至少会共享相同的硬件时钟,但也可以通过使用版本控制系统作为中间而不是直接使用共享文件来避免这个问题。 签入和签出代码仍然是为第二个系统构建的大量开销。在许多情况下,当一个人不在代码的机器特定部分上工作时,如果它在 Windows 上工作,它可能会在 linux 上工作 - 在对程序的通用部分进行一些更改后立即有趣的问题可能是第二个编译器只是接受它,而不是在结果运行时(最终必须检查,但不那么频繁)。【参考方案4】:

也有像这样的库:http://www.shlomifish.org/open-source/portability-libs/,提供平台之间的可移植性。对于其他的,我建议寻找抽象库

【讨论】:

【参考方案5】:

如果你有足够新的 CPU,你应该获得 VirtualBox 并安装 kubuntu 或任何其他发行版,虽然听起来可能很复杂,但测试和调试二进制文件会更容易。

【讨论】:

以上是关于在 Windows 上运行并生成 Linux 代码的 C++ 编译器的主要内容,如果未能解决你的问题,请参考以下文章

在 Windows 7 上从 emacs 运行 nmake

在 Windows、Linux 等上运行 pyjnius

在 Windows 上开发并在 linux 机器上运行

C ++程序在Linux上运行完美,但无法在Windows上运行

在 Linux 上使用多处理时不出现 TKinter 窗口

为啥这段代码可以在 Linux 上运行,但不能在 Windows 上运行?