在 Linux 上使用 Qt 为 Windows 创建可执行文件

Posted

技术标签:

【中文标题】在 Linux 上使用 Qt 为 Windows 创建可执行文件【英文标题】:Creating executable for Windows using Qt on Linux 【发布时间】:2009-06-08 06:12:41 【问题描述】:

是否可以在 Linux 上使用与 Eclipse 相同的 Qt 代码为 Linux 和 Windows 创建可执行文件?还是需要在我的 Linux 机器上安装 Qt Creator?

【问题讨论】:

【参考方案1】:

如果你想在 linux 上构建一个 windows 二进制文件,你需要交叉编译。这意味着您需要安装 Windows 交叉编译器以及您要链接的库使用交叉编译器构建。对于一个基本的 Qt 程序,这意味着您至少需要一个交叉编译的 Qt。

交叉编译与 Eclipse 或 Qt Creator 无关。我不认为两者都支持开箱即用的交叉编译,但我想你可以让它们这样做。

【讨论】:

实际上我需要使用 QT 在 Linux 中创建 Windows 可执行文件,我的要求是我只需要安装 Windows QT 二进制文件并运行我在 Linux 中创建的可执行文件。所以请告诉我,我可以在 Linux 中使用 QT Eclipse 集成来创建 Linux 和 Windows 可执行文件吗? 我能够为我的程序获取 Linux 可执行文件,但是如何在 Linux 中获取相同的 windows 可执行文件? 抱歉,我不清楚您的问题。如果你想在 Linux 上交叉编译一个 Windows 二进制文件,你需要先交叉编译 Qt,你需要自己做。我还没有看到任何操作系统的 any 预打包交叉编译 Qt。 Qt Eclipse 集成根本不创建任何二进制文件。它运行编译器,要在 Linux 上构建 Windows 二进制文件,您需要安装交叉编译器 没有 Vincat,您的 linux 可执行文件将无法在 Windows 中运行。你需要按照 bluebrother 的建议去做:你需要为 Windows 交叉编译它。这意味着你在你的 linux 机器上安装一个交叉编译包,它将为 Windows 编译你的代码并链接到 Windows 库。然后你可以在 Windows 上使用那个可执行文件。查看 MinGW 编译器,我知道它可以在 Windows 上编译 Qt,并且有可用于 linux 的交叉编译器。【参考方案2】:

当然,可以在 Linux 中安装 Qt Creator。相同的 Qt 代码可用于在 Linux/Win32/Mac 中编译。但是,您应该仅在以下范围内使用特定于平台的代码:

#ifdef Q_OS_WIN32
    qDebug() << "Executable files end in .exe";
#endif

对于其他操作系统还有其他定义。如果你这样做,你是安全的,你可以打赌它是跨平台的代码。 :-)

请参考http://www.qtsoftware.com/downloads 并下载Qt SDK for Linux/X11。它包含 Qt Creator、Assistant、Designer 等。

【讨论】:

实际上我需要使用 QT 在 Linux 中创建 Windows 可执行文件,我的要求是我只需要安装 Windows QT 二进制文件并运行我在 Linux 中创建的可执行文件。所以请给我打电话,我可以在 Linux 中使用 QT Eclipse 集成来创建 Linux 和 Windows 可执行文件。我能够为我的程序获取 Linux 可执行文件,但是如何在 Linux 中获取相同的 Windows 可执行文件? 这是一个关于如何在 Linux 中为 Windows 进行交叉编译的链接 - silmor.de/29【参考方案3】:

前段时间我试图这样做,我在这里找到了有关交叉编译的资源:@​​987654321@。最后我在windows下编译了win32版本,因为时间不够,不过应该是可以的。

【讨论】:

【参考方案4】:

对于 Eclipse,有一个 official plugin。

用于 C++ 的 Qt Eclipse 集成

Eclipse 插件可用于 使用任何 Qt 版本创建程序 从 4.1.0 开始。

【讨论】:

不回答问题,他已经在使用 Eclipse for Qt。【参考方案5】:

windows 中的可执行文件在 linux 中不起作用,反之亦然。你可以这样做:

#ifdef Q_WS_X11
QString *OS=new QString("Linux");
std::cout << OS->toStdString() << std::endl;
#endif
#ifdef Q_WS_WIN
QString *OS=new QString("Windows");
std::cout << OS->toStdString() << std::endl;
#endif
#ifdef Q_WS_MACX
QString *OS=new QString("Mac");
std::cout << OS->toStdString() << std::endl;    
#endif

【讨论】:

有什么用?这段代码有什么问题?它只是键入我使用的操作系统。没有别的了。我不明白...

以上是关于在 Linux 上使用 Qt 为 Windows 创建可执行文件的主要内容,如果未能解决你的问题,请参考以下文章

在嵌入式 linux 平台上运行使用 QT 在 windows 中创建的应用程序

将 Qt 应用程序从 Linux 移植到 Windows

Linux 上 C 中的 UDP 发送方和 Windows 上 Qt 中的接收方不起作用? [关闭]

Windows 和 Linux 在 QT 中的形式差异

如何使用WINE在Linux上使用Windows .lib

qt如何在windows上打开usb摄像头?