是否可以在Linux上为其他平台创建二进制文件?

时间:2009-11-06 15:09:33

标签: linux gcc cross-compiling

是否可以在Linux上创建其他平台的二进制文件?假设我有一个可以使用gcc编译到.o文件的程序,但是我们可以使用它来输出可以在Windows上运行的exe吗?

7 个答案:

答案 0 :(得分:7)

简短版本 是的你可以。 这称为交叉编译,使用此关键字在Google上进行的任何搜索都会为您提供足够的结果。

现在是现实: 即使在两个平台上运行相对较小的c / c ++代码也需要付出相当大的努力。 API,用户界面,调用约定,对齐等等的差异是常见的做法。 幸运的是,有很多跨平台工具可以帮助您。谷歌的 Qt ,一个跨平台的用户界面库。或者随时随地使用 Boost 。 您可能需要添加大量#ifdef __WINDOWS__#ifdef __UNIX__(这些语句可能不正确),以便为每个平台指定单独的代码行。

因此,对于这两种平台而言,编码并不是一种必要条件,并且根据您编写的软件的复杂性,需要深入了解操作系统,尤其是操作系统。

换句话说:没有工具可以将.exe从你的.o中删除,就像那样。

祝你好运!

〜罗布

答案 1 :(得分:1)

是。寻找目标平台的交叉编译器。

这是您为ARM处理器和其他嵌入式平台开发移动应用程序的方法。例如:当您编写symbian应用程序时,您可以在开发期间在Windows模拟器上运行,但是在部署它时,您需要使用ARM交叉编译器编译项目,因为几乎所有手机都在ARM处理器上运行。

答案 2 :(得分:1)

不确定。如果您有一个可以生成Windows二进制文件的编译器,那么运行编译器的系统并不重要。

许多用于以Unix为中心的开源项目的Windows二进制文件都是在没有任何人运行Windows的情况下生成的。例如。 Rake-Compiler是用于为MRI和YARV Ruby实现构建二进制扩展的项目。 Rake-Compiler的主要目标之一是扩展编写者可以从Linux或OSX发布Windows扩展。

答案 3 :(得分:0)

Google for“linux cross compilation windows”。 first link看起来很不错。

答案 4 :(得分:0)

我不知道那种工具,但主要是我看不出任何使这不可能的原因。

例如,Linux上可以有一个工具,它可以通过映射到Linux API函数而不是Win32 API函数(通过知道它们的地址)来编译C ++代码!

答案 5 :(得分:0)

我的想法都没有直接回答你的问题,但值得考虑。

在另一台计算机(物理或虚拟)上运行Windows也是一种选择。拥有完整的Windows环境将使调试和测试Windows版本变得更加容易。

当然,您可以使用Java或解释语言(即:python)并尝试最小化特定于平台的代码。

答案 6 :(得分:0)

如果您需要GUI,请尝试使用kdevelop和Qt,您可以“明确地”在Linux主机上构建Windows GUI和/或控制台程序。

你也可以尝试谷歌搜索“工具链”和/或“交叉编译”,我做以上为我的路由器(这是'其他'平台 - 而不是Windows)构建软件 基本上,通过使用不同的编译器来编译我的目标操作系统来完成编译