【问题标题】:Queries on Cross compiling, from Windows to Linux and from Linux to Windows,交叉编译查询,从Windows到Linux,从Linux到Windows,
【发布时间】:2012-11-02 06:32:28
【问题描述】:

我正在开发一个使用 ffmpeg 库的 C 项目。 目前我正在windows 平台上工作,我将为Linux ARM 交叉编译该项目。 有了这样的背景,我几乎没有什么基本问题。

  1. 如果我使用 ANSI C++,我可以肯定,我将能够使用相应的编译器交叉编译项目[ MSVC, MingW ]

    但是..

  2. 如果我在我的项目中使用“Win32”和其他“Windows”特定的 API,交叉编译器将如何处理它,以使项目能够在 Linux 上运行。

    李>
  3. 同样,如果我在我的项目中使用 Linux 特定的“功能”,交叉编译器将如何处理它,以使项目能够在 Windows 上运行。

【问题讨论】:

    标签: c++ c linux windows cross-compiling


    【解决方案1】:

    当您进行交叉编译时,被交叉编译的代码必须使用目标平台(即最终将在其上运行的平台)上可用的 API。当它的输出在 Linux 机器上运行时,交叉编译器不会神奇地访问 Win32 API。它与在目标机器上编译代码 相同,但意味着您实际上不需要这样做。换句话说,您可以通过在 ARM Linux 机器上运行本机(非交叉)编译器来实现相同的目标,但您需要一个足够强大的 ARM 机器来运行编译器。

    也就是说,原则上,您可以在使用winelib 提供win32 API 的同时交叉编译到Linux。不过不确定它在 ARM 上的效果如何——它只适用于 x86。

    最后,请注意,即使在最好的情况下,交叉编译也往往相当复杂。从 x86 Linux 交叉编译到 ARM Linux 而不是 x86 Windows 到 ARM Linux 交叉编译可能会让您的生活更简单——虽然可以进行跨操作系统和跨平台构建,但您更改的变量越少,事情就越简单。

    【讨论】:

    • 谢谢,这几乎回答了我的问题,所以如果我打算交叉编译,我不应该使用操作系统特定的函数调用。
    • @VijaySringeri,您可以使用特定于操作系统的函数调用,但它们需要特定于 target 操作系统(代码最终将在其中运行),而不是 host OS(编译器运行的地方)。因此,您可以使用pthread_create,例如,如果您要交叉编译到 Linux,即使编译器在没有 pthread 库的 Windows 上也是如此。
    • 毫无疑问,在主机 x86 系统上安装 Linux(至少在 VM 中)会对您有很大帮助。
    • @bdonlan,是的,你是对的。因此,如果我使用的是特定于操作系统的基础架构,我必须使用 MACROS 来启用/禁用功能。
    【解决方案2】:

    如果您使用 Winapi,您的项目将无法在 Linux 上运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-27
      • 2017-02-03
      • 2014-01-16
      • 1970-01-01
      • 2018-01-14
      • 2021-11-20
      • 2017-06-22
      • 1970-01-01
      相关资源
      最近更新 更多