第一步是创建一个独立的 uniGUI 应用程序。

New -> Other... -> Delphi -> uniGUI for Delphi -> Application Wizard

在Linux上编译和运行 uniGUI 应用程序_应用程序

将在IDE中创建一个标准的uniGUI应用程序:

在Linux上编译和运行 uniGUI 应用程序_应用程序_02

默认目标平台是 Windows 32。对于 Windows,您可以直接编译和运行此应用程序。

对于 Linux64 平台,应该进行一些调整。首先,我们需要调整框架文件的路径。目前没有适用于 Linux 的运行时包,因此我们需要手动调整代码中的路径。

实际上,这很容易做到。在 ServerModule 中,有一个名为 FrameworkFilesRoot 的新属性。它允许您轻松调整所有框架文件所在的路径。

注意:Staring with build 1591 uniGUI runtime for Linux 以 tar.gz(或 tar.xz)格式部署,可从客户门户下载。 

在Linux上编译和运行 uniGUI 应用程序_服务器_03

对于 1591 之前的版本,您需要手动创建 Linux 运行时文件。首先,您需要创建一个包含所有 uniGUI 运行时文件的压缩文件。

打开安装了 uniGUI 的文件夹。有 4 个文件夹包含 uniGUI 运行时文件。

在Linux上编译和运行 uniGUI 应用程序_Delphi_04

 现在创建一个压缩的 ZIP 文件,其中将包含所有这些文件夹和子文件夹。

在Linux上编译和运行 uniGUI 应用程序_Delphi_05

使用 FTP 或任何其他首选方法将此 ZIP 文件复制到您的 Linux PC。

在Linux上编译和运行 uniGUI 应用程序_服务器_06

在 Linux 机器中,我们在 etc 文件夹下创建了一个名为 fmsoft/unigui 的文件夹。由于 etc 是一个 Linux 系统文件夹,因此您需要管理员权限才能执行此作。

将您的 zip 文件复制到此文件夹中。同样,您将需要管理员权限。

您还可以在 Linux 主文件夹下选择一个文件夹,但使用 etc 会更好,因为它对所有用户都可见。

现在将此文件解压缩到当前文件夹中。将创建一个名为 unigui_runtime 的新文件夹。它包含 uniGUI 应用程序在 Linux 服务器上运行所需的所有文件。如果您使用任何第三方 uniGUI 控件,那么您也需要在此处复制它们。

在Linux上编译和运行 uniGUI 应用程序_服务器_07

 请注意,Linux 是一个区分大小写的操作系统,因此在您的应用程序中,所有文件和文件夹名称都应使用相同的大小写来引用。

 现在让我们回到我们的 uniGUI 应用程序并配置 FrameworkFilesRoot 属性。

procedure TUniServerModule.UniGUIServerModuleBeforeInit(Sender: TObject);
begin
{$ifdef Linux64}
  FrameworkFilesRoot := '/etc/fmsoft/unigui/unigui_runtime';
{$endif}
end;

在 OnBeforeInit 事件中添加上面的行。请注意,我们还定义了一个条件指令,因此只有在为 Linux 平台编译应用程序时才会激活此语句。

从内部版本 1591 开始,可以使用新的 FrameworkFilesRootLinux 属性。此属性可以留空,当它为空时,它将使用默认值“/etc/fmsoft/unigui/unigui_runtime”。

简而言之,从内部版本 1591 开始,如果未向 FrameworkFilesRoot 或 FrameworkFilesRootLinux 分配任何值,则任何 Linux 应用程序都将使用此默认路径。请注意,为了保持向后兼容性,如果 FrameworkFilesRootLinux 为空,则分配给 FrameworkFilesRoot 的值将用于 Linux 平台。如果同时为 FrameworkFilesRoot 和 FrameworkFilesRootLinux 分配值,则在这种情况下,FrameworkFilesRoot 将用于 Windows 平台,FrameworkFilesRootLinux 用于 Linux 平台。

因此,如果要使用内部版本 1591 或更高版本编译应用程序,而不是将代码添加到 OnBeforeInit 处理程序,则可以直接将值分配给 ServerModule、FrameworkFilesRootLinux 或 FrameworkFilesRoot 属性之一。(见上文)

下一步是将 Linux64 平台目标添加到您的应用程序中。

在Linux上编译和运行 uniGUI 应用程序_应用程序_08

在Linux上编译和运行 uniGUI 应用程序_Delphi_09

.\Linux64\Debug\ 文件夹中。

在Linux上编译和运行 uniGUI 应用程序_应用程序_10

您会注意到该文件没有扩展名,因为在 Linux 中可执行文件没有默认扩展名。

在此步骤中,我们已准备好运行应用程序。我们假设 PAServer 应用程序在 Linux 上运行,并且 Delphi 已正确配置为与 PAServer 通信。

通过按 F9,Delphi 将开始将 Linux 应用程序部署到您的 Linux 服务器。部署完成后,应用程序将在 Linux 服务器上以调试模式执行。

现在,您可以通过在浏览器选项卡中打开您的第一个 uniGUI Linux 应用程序来测试它。应用程序的正确 URL 应为 http://linuxserver_ip_address:8077

在我们的特殊情况下,我们的 Linux 服务器位于地址 192.168.1.15,因此我们应该调用 http:// 192.168.1.15:8077/

在Linux上编译和运行 uniGUI 应用程序_Delphi_11

如果所有设置都正确,您将在浏览器中看到一个空白的 uniGUI 表单。祝贺!您刚刚运行了您的第一个 Linux uniGUI 应用程序!

注意:

如果要为 Linux 平台转换/编译现有的 uniGUI 应用程序,您可能会注意到 Linux64 目标平台可能不会出现在可用目标列表中。

要解决此问题,请关闭项目并在文本编辑器中打开相关的 .dproj 文件。

更改以下行:

<FrameworkType>VCL</FrameworkType>

 为

<FrameworkType>None</FrameworkType>

 在此更改之后,您应该能够在可用平台列表中看到 Linux64 平台。