交叉编译查询,从Windows到Linux,从Linux到Windows,
Posted
技术标签:
【中文标题】交叉编译查询,从Windows到Linux,从Linux到Windows,【英文标题】:Queries on Cross compiling, from Windows to Linux and from Linux to Windows, 【发布时间】:2012-11-02 06:32:28 【问题描述】:我正在开发一个使用 ffmpeg
库的 C 项目。
目前我正在windows 平台上工作,我将为Linux ARM 交叉编译该项目。
有了这样的背景,我几乎没有什么基本问题。
如果我使用 ANSI C++,我可以肯定,我将能够使用相应的编译器交叉编译项目[ MSVC, MingW ]
但是..
如果我在我的项目中使用“Win32”和其他“Windows”特定的 API,交叉编译器将如何处理它,以使项目能够在 Linux 上运行。
李> 同样,如果我在我的项目中使用 Linux 特定的“功能”,交叉编译器将如何处理它,以使项目能够在 Windows 上运行。【问题讨论】:
【参考方案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 上运行。
【讨论】:
以上是关于交叉编译查询,从Windows到Linux,从Linux到Windows,的主要内容,如果未能解决你的问题,请参考以下文章
如何配置 Qt 以实现从 Linux 到 Windows 目标的交叉编译?
从linux交叉编译到windows一个visual studio项目
当静态库不可用时,是不是可以从 linux 交叉编译 Windows?
从 Mac 为 Windows、Linux 交叉编译 C++/QT [关闭]