是否可以在Linux上创建其他平台的二进制文件?假设我有一个可以使用gcc编译到.o
文件的程序,但是我们可以使用它来输出可以在Windows上运行的exe
吗?
答案 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)
你也可以尝试谷歌搜索“工具链”和/或“交叉编译”,我做以上为我的路由器(这是'其他'平台 - 而不是Windows)构建软件 基本上,通过使用不同的编译器来编译我的目标操作系统来完成编译