在Linux上开发Windows应用程序?

18

我的主要操作系统是Linux,但现在我被迫为Windows编写一些C++应用程序。

我考虑在Linux上使用跨平台库(如WxWidgets)开发(并注意其他平台依赖项),然后将结果交叉编译为mingw目标。

所以我想使用的工具是:

  • g++用于编译和交叉编译。
  • CMake
  • WxWidgets
  • ???用于创建Windows安装程序包
  • wine用于测试Windows版本

我的问题是:

  1. 有哪些免费(或更好的开源)Windows安装程序可供我使用来创建最终软件包?如果可以从Linux准备软件包则更好。

  2. Wine是否足以测试交叉编译版本(在逻辑在Linux版本中已经测试通过的情况下)?

  3. 这是一个好主意吗? :-)


6
如果你有Windows的副本,运行一个VirtualBox实例也不会影响测试。 - Amber
至少在测试时,Virtual Box 是一个不错的选择,当然最好的是安装在 Windows 上。尝试在 Windows 上编写该应用程序。我自己喜欢 Linux。但如果你要为 Windows 构建应用程序,那么在 Windows 上编程是你能做的最好的事情(当然是针对 Windows 应用程序而言)。 - Fábio Antunes
7个回答

15

也要检查Qt。它是一个非常丰富的跨平台框架。

至于安装程序,我强烈推荐使用WiX

对于测试,最好使用像Sun Microsystems的VirtualBox这样的虚拟化技术。我相信你可以使用试用版的Windows或者免费使用直到2010年3月的Windows 7 RC。


Qt很糟糕。使用Qt编写的应用程序肯定不会像Windows应用程序一样,并且许可证也不是很好。你必须向Qt支持公司支付大量商业许可证费用。这也适用于静态链接。因此,在跨平台使用Qt应用程序时,你需要付费,而创建本地外观的应用程序则是免费的...希望你明白我的意思。;-) - Igor

5
首先,是个好主意。我有几个项目都是这样维护它们的Windows版本。
无论如何,我建议你在Windows机器上测试最终产品。如果你有Windows操作系统的许可证,可以使用虚拟化来进行最后的测试。
我建议使用Autotools,它具有非常好的交叉编译支持,并且可以与交叉编译器“原生”地配合使用。
例如,在Debian下运行
./configure --host=i586-mingw32msvc

这将创建正确的交叉编译 makefile,就像这是一个 Unix 项目一样。

无论如何,我建议开发一个跨平台版本和一个定期测试本机 Windows 版本,通过交叉编译它们使用 Wine/Windows。


我们无法使用分析器,这是一个劣势吗?而且,如果我理解正确,优化过程在不同的操作系统中差异很大。我该如何解决这个问题?或者像你提到的那样,在“Windows的最终测试”时关注优化是否更好? - sjsam

4
    • InstallJammer 可以帮助你创建*nix和Windows的安装程序。我不确定它是否允许跨平台创建安装程序(例如从*nix创建Windows安装程序)。一个商业选项,提供试用版,是Bitrock InstallBuilder
    • 也许... 如果你有Windows许可证,Dav的建议会更好一些。
    • 如果它可以帮助你更好/更有效地工作,当然可以。

请随时告诉我们你的进展情况 - 这很有趣。


4
你的意思是这些应用只适用于Windows而不是跨平台,如果是这样,我认为问题3的答案 - 这真的不是一个好主意 - 胜过其他。原因是,你无论如何都要在Windows下进行广泛的应用程序测试,直接或通过虚拟实例。因此,最好在目标操作系统下开发,因为你更有可能产生更好的应用程序 - 早期和更全面地捕获错误,并确保你的应用程序对用户'有效'。我肯定不会只信任 Wine。我不是跨平台小部件的忠实粉丝。就像Java应用程序一样,你通常会得到一些看起来不太对的东西,就像神秘鸿沟一样,足以使你的应用程序在大多数用户中散发出不良气味。即使在稍微抽象的层面上,每个操作系统的应用程序在它们工作的感觉上略有不同,你很可能会得到一个感觉像KDE的Windows应用程序,这又会让你的用户失望。
所以,当然可以做到这一点,但从最终产品的质量角度来看,这可能不是最佳方法。这样做会使你的产品有些劣势,我认为这很可能会抵消你使用Linux平台的便利性。实际上,如果你尝试在真正的Windows下使用一个不熟悉的工具集,我会感到惊讶,因为我打赌你会花更多时间来调整小部件,使它们在真正的Windows下正常工作。

@PeterMortensen,如果OP选择wxWidgets,它将看起来和感觉像本地的Windows应用程序。 - Igor

2

2) 不,如其名所示的 Wine 并不是 Windows,您不能可靠地以此进行测试。我建议在您的 Linux 上运行虚拟机,这将使您的工作更加流畅。

3) 听起来是可能的,对于图形方面,我还会考虑使用 GTK+,它被用于 GIMP,并且在 Windows 和 Linux 上运行方式相同。


2

无论如何,您需要一份 MSDN 许可证才能访问所有您想要测试的 Windows 版本。

您需要在虚拟机上安装测试操作系统。这可以在您的 Linux 桌面上完成,但使用专用的计算机可能更好。

我不知道您计划支持多少个 Windows 版本,但您应该在所有版本上进行测试。Wine 不是 Windows,Windows XP 与 Windows Vista、Windows 7 等也不同。此外,还有许多不同版本和语言的 Windows,您肯定也需要在其中一些上进行测试。

当然,您可以在 Linux 上开发。当然,使用跨平台小部件(是的,这些很好)。但是您仍然需要 MSDN 许可证以便安装测试操作系统。


0

NSIS,即Nullsoft Scriptable Install System,可以在Linux下编译并用于生成Windows的安装二进制文件。具体指南请参见这里。请阅读一般部分和POSIX构建部分。

我使用它来为几个项目生成安装程序。


1
我真的认为NSIS很糟糕。在尝试使用NSIS工作了几天后,我感到到处都是疼痛... 它不会报告错误(没有像记录所有包括错误和未成功执行的命令的日志),变量分配和使用对我来说也不清楚。没有真正的乐趣。 - Henning
我使用Inno Setup,它真的是最好的。 - Nathan Osman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接