【问题标题】:Is it possible to create binaries for other platform on Linux?是否可以在 Linux 上为其他平台创建二进制文件?
【发布时间】:2009-11-06 15:09:33
【问题描述】:

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

【问题讨论】:

  • 交叉编译?这一定是骗子。
  • 我在一家制造使用 Intel i960(?) 芯片的路由器的地方工作,并使用 gcc 交叉编译器交叉编译了代码

标签: linux gcc cross-compiling


【解决方案1】:

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

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

因此,为两个平台编写代码并不是一件容易的事,而且根据您所编写软件的复杂性,需要深入了解一般操作系统,尤其是两个操作系统。

换句话说:没有任何工具可以像这样从您的 .o 中生成 .exe。

祝你好运!

~罗伯

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      当然。如果您有一个可以生成 Windows 二进制文件的编译器,那么编译器运行在什么系统上都没有关系。

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

      【讨论】:

        【解决方案4】:

        谷歌搜索“linux 交叉编译窗口”。 first link 看起来不错。

        【讨论】:

        • 请注意,构建系统非常重要。那里的示例使用由通用 autoconf 管道构建的配置脚本。希望您的项目已经在使用类似的东西。
        【解决方案5】:

        我不知道那种工具,但主要是我看不出有什么理由使它不可能。

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

        【讨论】:

          【解决方案6】:

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

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

          当然,您可以使用 Java 或解释型语言(即:python)并尽量减少特定于平台的代码。

          【讨论】:

            【解决方案7】:

            如果您需要 GUI,请尝试 kdevelop 和 Qt,您可以“绝对”通过这种方式在 Linux 主机上构建 Windows GUI 和/或控制台程序。

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

            【讨论】:

            • 和'为什么'这里是-1?教育我,告诉我我的帖子有什么问题,干杯:)
            猜你喜欢
            • 1970-01-01
            • 2016-04-17
            • 2013-10-20
            • 1970-01-01
            • 2010-12-03
            • 2014-03-24
            • 2010-10-29
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多