如何交叉编译我的 Linux 应用程序以在 Linux 中获取 Windows 可执行文件?

Posted

技术标签:

【中文标题】如何交叉编译我的 Linux 应用程序以在 Linux 中获取 Windows 可执行文件?【英文标题】:How can I cross compile my Linux application to get a Windows executable in Linux? 【发布时间】:2009-06-26 03:40:58 【问题描述】:

我需要在 Linux 中交叉编译我的 QT 应用程序。我在 Linux 中从 QT SDK 编译了我的应用程序,它工作正常。 如何在 Linux 中为同一应用程序创建 .exe。我已经在 Linux 和 qmake 中安装了 Mingw,但我不知道如何进行交叉编译。 如何将我的 QT 与 MinGW 和 Qmake 等交叉编译器链接。我正在使用 SuSE Linux。我也经历过http://Silmore/29,但我没有清楚地了解如何进一步进行。

【问题讨论】:

suse,vincat 再次发帖,这是什么,连续第 7 个重复问题?不如自己亲自去挖掘,而不是等着别人把它喂给你呢? 【参考方案1】:

我不熟悉 SuSE,但 Ubuntu 有 mingw32 包,它是一个面向 Windows 的交叉编译器,以及开源的 win32api:

(来源:liranuna.com)

经过小小的搜索,发现有它的 RPM here,而它可能应该在您的存储库中。

【讨论】:

我已经在我的 SUSELinux 中安装了 mingw.. 但我没有找到 i386-mingwmsvc-gcc :( 我确实有 i386mingw-gcc 和许多其他...我给出了一个类似 admin@host:i386mingw 的命令-gcc analogclock.cpp -mwindows -o analogclock.exe 但它给出的输出是: C++ compiler is not installed in this system :( 该命令是为 Windows 创建可执行文件吗?请告诉我我该怎么办??? @Cathy,你需要安装相应的包来获取编译器。 虽然这适用于本机 Windows 应用程序,但不适用于 Qt 应用程序——您还需要一个交叉编译的 Qt 才能工作。链接 linux Qt 库无助于创建 Windows 可执行文件。 bluebrother 不正确 - mingw32msvc 支持 'MSVC' 格式的 name.lib 文件(重命名为 libname.a 并用作 -lname),可以正常工作。【参考方案2】:

基本上,您将跨工具链用于 Make 过程,而不是主机工具链。我假设没有自动工具配置脚本。如果有,您可以运行 configure 并指定 --host 并为您解决所有问题。

所以你需要做的是设置 CC、LD、CFLAGs、LDFLAGS(可能还有 CXX 和 CXXFLAGS)并修改 Makefile 以使用正确的 QT 库 - 这需要是 mingw,而不是你的 Linux 库。因此,您可能还需要获取 MinGW/Windows QT SDK 并将其单独存储,以便正确指定您的路径。

希望这会有所帮助!

【讨论】:

你能再详细点吗... mingw 是否保存 Windows 二进制文件和 dll 的?据我所知,mingw 拥有 Windows 库和二进制文件,它们有助于为 Windows 创建可执行文件,这些文件安装在 Linux m/c 中,如果我通过命令作为 [admin@host:i386mingw-gcc app.cpp -0 app 。可执行程序]。如果我错了,请指导我.. 正确 - Linux MinGW 具有 Linux 可执行文件(i386-mingw-gcc 和朋友)和 Windows 库(和 DLL)。它旨在让您在 Linux 上为 Windows 编译程序。请注意,要编译 C++,您应该使用 i386-mingw-g++,而不是 i386-mingw-gcc。【参考方案3】:

您可以通过 wine 运行 Visual C++ Express Edition 2008 cl.exe 来编译您的项目。

【讨论】:

我不应该使用wine模拟器..我需要在Linux中本地编译以获得.exe..请告诉我在Linux中使用Mingw交叉编译器的过程

以上是关于如何交叉编译我的 Linux 应用程序以在 Linux 中获取 Windows 可执行文件?的主要内容,如果未能解决你的问题,请参考以下文章

嵌入式Linux开发之第三方库交叉编译

嵌入式Linux开发之第三方库交叉编译

嵌入式Linux开发之第三方库交叉编译

在 ARM 平台上为嵌入式 Linux 交叉编译 Clion

交叉编译ffmpeg(hi3520d)

如何配置 Qt 以实现从 Linux 到 Windows 目标的交叉编译?