是否有任何USB棒可运行,无安装,跨平台的软件框架(带GUI)?

Fea*_*eep 10 installation portability frameworks cross-platform portable-applications

有谁知道一个好的软件开发框架或类似的具有以下属性?

  • 跨平台:它应该可以在XP,Vista,OSX和Linux的常见版本(例如Ubuntu和Kubuntu)上运行.
  • 无安装:能够从USB记忆棒运行软件而无需将任何内容复制到主机.
  • 有良好的GUI支持(这就是为什么这个问题没有给出一个合适的答案,据我所知).
  • 许可许可,如LGPL或BSD等.

其中较为柔和的要求是为最常见的后端功能提供一组抽象,例如套接字,文件IO等(通常需要一些特定于平台的调整),并支持Python或C++等优秀语言,尽管如此学习一个新的(即不是perl)通常很有趣.

我认为可能的候选人是Qt 4.5或以上(但IFAIK Qt软件不会在没有任何安装的情况下在Vista上运行(?)),一些wxWidgets或者wxPython解决方案,也许是gtkmm.我发现的例子在一个或另一个要求上失败了.这并不意味着没有这样的例子,只是意味着我没有找到任何例子.所以我想知道是否有人知道任何现有的解决方案吗?

一些澄清;

  • "框架"我指的是像Qt或gtkmm或带有widget包的python.
  • 这是关于能够在没有安装的情况下在多个平台上运行成品,而不是具有便携式开发环境.
  • 它不是靴子.
  • 如有必要,必须专门为不同的目标构建软件.

我看到的用例是你有一些你依赖的软件(如项目规划,信息管理,分析工具或类似工具):

  • 不依赖于互联网连接可用.
  • 在不同的主机上运行,​​在那里安装任何东西都不是很好.
  • 由用户通过物理介质(例如USB记忆棒)移动.
  • 在不同的操作系统上运行,例如Windows,Vista,Ubuntu,OSX.
  • 在这些不同的主机上处理相同的数据(数据可以存储在主机或棒上).
  • 并没有真正限制捆绑框架的大小(除非它是几千兆字节,这是不现实的).

只要软件的行为相同,并且在不同目标上运行时可以处理相同的数据,也可以在棒上进行并行安装.

关于用例的另一个观点是,我有五台新安装的机器,分别是Vista,XP,OSX,Ubuntu和Kubuntu.我想,无需在机器上安装任何新东西,就可以在这五台机器中的每台机器上运行相同的软件(满足上述GUI要求等)(但如果需要,可以从不同的机器上运行)棒上捆绑).

这可能吗?

编辑:我已经尝试了一些使用一些小部件和一个sqlite数据库的Qt应用程序.很容易让它在ubuntu dist和osx上工作.对于Windows XP和Vista我不得不将QtCored4.dll,QtGuid4.dll,QtSqld4.dll和mingwm10.dll复制到分发目录(这是调试代码),我将qsqlited4.dll复制到分发中名为"sqldrivers"的文件夹中目录.

mgh*_*hie 4

您提到了wxWidgets,但由于它至少未满​​足其中一项要求而将其驳回。

我不知道你的要求是什么,以及 wxWidgets 在什么方面不适合你,但在我看来,它确实满足了这些要求:

跨平台:它应该可以在 XP、Vista、OSX 和常见版本的 Linux 上运行。

它确实可以在这些平台上运行,但“Linux 的通用版本”还不够好,因为您永远无法确定是否会安装 wxGTK 所需的 GUI 库(不应静态链接到)。然而,这对于其他解决方案来说也是一个问题,除非您打算将所有内容都放在棍子上。

无需安装:能够从 USB 记忆棒运行软件,而无需将任何内容复制到主机。

请参阅上一点,您需要指定 Linux 上需要哪些库。您还可以在构建时指定不使用某些系统提供的库(例如图形、压缩、正则表达式),而是使用 wxWidgets 内部库。

有良好的GUI支持

查看。

宽松的许可,例如 LGPL 或 BSD 等。

查看。您也可以将 wxWidgets 静态链接到您的应用程序中。

支持Python或C++等优秀语言

两者都支持,并且也有与其他语言的绑定。

拥有一组最常见后端功能的抽象,例如套接字、文件 IO 等

它确实有一些类似的抽象,但您也可以链接到其他跨平台库。

我们将 wxWidgets 用于FlameRobin,这是 Firebird SQL 服务器的图形管理程序。它具有到 Windows、Linux 和 Mac OS X 的活动端口,并且至少已针对某些 BSD 变体和 Solaris 进行了编译。它肯定可以在 Windows 上运行,我还没有尝试过 Linux 或 Mac OS X,但我不明白为什么它不应该在那里。