什么是我在Linux上的Delphi应用程序的最佳解决方案 - Delphi + Wine或Lazarus?

Joh*_*ler 10 linux delphi wine lazarus

我需要在Linux上提供我的Delphi解决方案,并且我已经在Wine和Lazarus上测试了它们.从长远来看,我应该考虑哪些技术因素(编程,部署,维护等),以避免在维护噩梦中降落.我保持我的Windows组件使用非常标准,以避免可能在跨平台上开发的复杂性.我正在寻找一些不仅仅是主观的事实.我不想考虑.Net/Mono因为这会让我立即回归(巨大的延迟推向市场),这是我买不起的.

我能想到一些:

  1. Lazaraus可能需要一些(更改)编程才能使代码工作.
  2. 葡萄酒是一个更难以维持在大量客户基础上的环境.

你对此的贡献将不胜感激.

Mar*_*ort 18

我会说那里没有黄金法则.这将取决于Lazarus支持您使用的组件数量.

我开始用拉撒路进行测试,并保留葡萄酒作为备用,以防你绝望.

Codegear计划仍然非常模糊(他们只是"看着它",但同时他们在两个完整版本上涂抹64位推出,所以即使这取得了进展,这可能还需要一段时间)

快速时间表让我觉得Apple版本将使用QT,而不是原生api.

更新:将近4年,仍然没有Linux支持.树木生长得更快.

  • 感谢当前满天星斗的人之间的理智声音,相信下一个Delphi版本(其中之一)只需按下按钮即可获得所有这些精彩的Linux和Mac OS X应用程序. (2认同)

Zoë*_*son 16

我必须不同意这里的其他人,并建议你使用Wine.Google正在通过Wine安装Picassa,您可以做同样的事情.他们不是依赖于发行版安装的版本,而是在预配置​​的程序目录中有一个副本,并且具有可以测试的已知版本.

基本上你只需要询问Wine包装器不会提供什么样的本机端口.对于大多数Delphi应用程序,答案可能是主题,而其他很少.我们创建了一个本地端口,因此我们可以在较低级别访问文件系统,但在此之前,我们的产品几乎完美地使用了Wine多年.

根据经验,本地港口不是在公园散步:

  • Lazarus可能不支持任何第三方组件.
  • 除非您将Windows版本切换到Lazarus,否则您需要维护parallal .lfm文件,如果切换,则会丢失Delphi IDE.和拉撒路一样好,它远远落后于最新的Delphis的抛光和功能.
  • 如果您有一个完全独立的程序与不同的小部件集,测试将需要更多的努力.对Wine的测试更接近于在新的Windows版本上测试现有版本.
  • 在FPC具有相同的功能之前,您将无法使用Delphi编译器引入的任何新功能(泛型,匿名方法).
  • 大多数64位Linux安装不包括32位版本的Gtk/Qt,安装它们可能很复杂且容易出错,因此您还需要编译64位版本的应用程序.

  • 它支持多少个TMS和DevExpress组件?我一定也错过了Ribbon控件,图像库,ZipForge/ziptv,VirtualShellTree,skinning/themeing,QuickReports等等.也许维基已经过时了...... (4认同)
  • 我不同意第三方组件.支持相当一些核心组件,如套接字套件,ZeOS,VST,Comport,TeeChart等等.我同意的第二点,至少在第一部分,双重维护是一个痛苦,如果你有很多GUI.(我将大部分Lazarus项目也改为在Windows上使用Lazarus,无论如何因为win64而使用)FPC在D2009之前发布了仿制药.但不幸的是CG实现了它们不兼容最后一点取决于你将走多远.Linux/PPC Sparc,ARM,Wince?首先看看64位Linux是否有意义. (2认同)

syb*_*eon 5

我一般建议使用Lazarus.如果您依赖WINE,您也会受到WINE错误的影响,这可能会影响您的产品质量.在Windows环境中使用Lazarus + FPC甚至可能很有用.

另一种方法是使用虚拟化,但这取决于您正在编写的应用程序类型.


Noa*_*oah 1

首先,您应该尝试确保您的 GUI 代码和非 GUI 后端代码完全分离到 GUI 应用程序和库中(如果尚未分离)。这使得测试更容易,也更容易实现命令行界面、Web 界面等。大多数情况下,这些库(带有对象和过程的单元文件)应该可以在 FreePascal 上轻松编译,但是您应该检查和调试非 GUI 代码第一的。

一旦解决了这个问题,就该看看你的 GUI 了。如果您使用大量闭源第三方商业组件,那么您可能无法轻松转换 GUI。如果您主要使用库存组件和/或已移植到 Lazarus 的组件,那么您确实可以转换 GUI 并按原样使用它。

请注意,由于 Mac OS 和 Linux 程序通常看起来不同,因此您可能需要根据您的应用程序来考虑这一点。可能的方法包括: 1. 即使在 Windows 上也使用 Lazarus,并对所有平台使用相同的 GUI 代码。2. 仅在 OS X 和 Linux 上使用 Lazarus,并将 GUI 自定义为转换后看起来有点原生。3. 为 OS X 编写本机 GUI(使用 Cocoa 或 XCode),然后链接到 Pascal 代码以进行非 GUI 处理。这种事情在 Linux 上不太必要,但是您可以选择用于 LCL (VCL) 后端的工具包。

每种方法都有强烈的支持者,但哪种方法正确取决于您的“情况”和您的目标。

如果您的主要兴趣是 OS X,请考虑加入 MacPascal 列表。

Wine 是一个巨大的杀伤力,除非你明天需要在几乎不做任何修改的情况下发布 Linux/OS X 应用程序。(既然如此,为什么不直接使用VMWare呢?)