是否可以在 Linux 上创建其他平台的二进制文件?假设我有一个可以使用 gcc 编译到.o
文件的程序,但是我们可以用它来输出exe
可以在 windows 上运行的输出吗?
7 回答
简短版: 是的,你可以。这称为交叉编译,使用此关键字在 google 上进行的任何搜索都会为您提供足够的结果。
现在是现实:
在两个平台上运行即使是相对较小的一段 c/c++ 代码也需要付出相当大的努力。API、用户界面、调用约定、对齐方式等方面的差异是常见的做法。幸运的是,有很多跨平台工具可以帮助您。Google for Qt,一个跨平台的用户界面库。或者在可能的时间和地点使用Boost 。您可能需要添加大量#ifdef __WINDOWS__
或#ifdef __UNIX__
(这些语句可能不正确)来为每个平台指定单独的代码行。
因此,为这两个平台编写代码并不是一件容易的事,并且根据您正在编写的软件的复杂性,需要深入了解一般操作系统,特别是两个操作系统。
换句话说:没有工具可以像那样从.o 中生成.exe。
祝你好运!
〜抢
是的。寻找目标平台的交叉编译器。
这就是您为 ARM 处理器和其他嵌入式平台开发移动应用程序的方式。例如:当您编写 symbian 应用程序时,您可以在开发期间在 windows 模拟器上运行,但是当您部署它时,您需要使用 ARM 交叉编译器编译项目,因为几乎所有手机都运行在 ARM 处理器上。
当然。如果您有一个可以生成 Windows 二进制文件的编译器,那么编译器在哪个系统上运行并不重要。
许多以 Unix 为中心的开源项目的 Windows 二进制文件都是在没有任何人运行 Windows 的情况下生成的。例如,Rake-Compiler是一个为 MRI 和 YARV Ruby 实现构建二进制扩展的项目。Rake-Compiler 的主要目标之一是扩展编写者可以从 Linux 或 OSX 发布适用于 Windows 的扩展。
谷歌搜索“linux 交叉编译窗口”。第一个链接看起来不错。
我不知道那种工具,但主要是我看不出有任何理由使它不可能。
例如,Linux 上可以有一个工具,它可以通过映射到不是 Linux API 函数而是映射到 Win32 API 函数(通过知道它们的地址)来编译 C++ 代码!
我的两个想法都没有直接回答你的问题,但是它们值得考虑。
在另一台机器(物理或虚拟)上运行 Windows 也是一种选择。拥有完整的 Windows 环境将使调试和测试 Windows 版本变得更加容易。
当然,您可以使用 Java 或解释性语言(即:python)并尽量减少特定于平台的代码。
如果您需要 GUI,请尝试使用 kdevelop 和 Qt,您可以“肯定”在 Linux 主机上构建 Windows GUI 和/或控制台程序。
您也可以尝试在谷歌上搜索“工具链”和/或“交叉编译”,我执行上述操作是为我的路由器构建软件(这是“其他”平台 - 虽然不是 Windows)基本上编译是通过使用不同的为我的目标操作系统编译的编译器