当前位置: 首页 > news >正文

Delphi 10.4.2 实战:手把手教你用FMXLinux在Ubuntu上跑通第一个GUI程序

Delphi 10.4.2 实战:手把手教你用FMXLinux在Ubuntu上跑通第一个GUI程序

如果你是一位长期在Windows平台使用Delphi的开发者,突然需要将应用部署到Linux环境,可能会感到有些无从下手。别担心,FMXLinux正是为解决这个问题而生。本文将带你从零开始,一步步完成环境配置、项目创建、编译部署到最终在Ubuntu上运行GUI程序的全过程。

1. 环境准备:搭建跨平台开发桥梁

在开始编码之前,我们需要准备好Windows和Linux两端的环境。这个过程看似繁琐,但每一步都是确保后续开发顺利的关键。

1.1 Windows端必备组件安装

首先确保你的Delphi 10.4.2已正确安装。接下来需要获取FMXLinux组件,这是实现跨平台GUI的核心:

  1. 访问FMXLinux官网下载最新安装包
  2. 以管理员身份运行安装程序
  3. 选择与Delphi 10.4.2兼容的版本
  4. 安装完成后,在Delphi的Tool Palette中应能看到新增的FMXLinux组件

注意:安装过程中可能会提示需要某些运行时库,请务必按照提示安装,否则可能导致设计时组件无法正常显示。

1.2 Ubuntu目标机配置

在目标Ubuntu机器上(这里以18.04 LTS为例),需要安装以下基础依赖:

sudo apt-get update sudo apt-get install -y libgtk2.0-dev libgl1-mesa-dev libgdk-pixbuf2.0-dev

这些库提供了GTK界面框架和OpenGL支持,是FMXLinux运行时的基础环境。如果是较新的Ubuntu版本(如20.04+),还需要额外安装:

sudo apt-get install -y libwebkit2gtk-4.0-dev

2. 创建第一个跨平台项目

环境就绪后,让我们创建一个简单的演示项目来验证整个工具链。

2.1 新建FMXLinux项目

在Delphi中按以下步骤操作:

  1. 选择 File → New → Multi-Device Application
  2. 在项目模板中选择 "Blank Application"
  3. 右键点击Project Manager中的Target Platforms,确保Linux64已勾选
  4. 保存项目到你的工作目录(建议路径不要包含中文或空格)

2.2 设计基础界面

拖拽以下组件到窗体上:

  • 1个TButton
  • 1个TMemo
  • 1个TLabel

双击按钮添加点击事件:

procedure TForm1.Button1Click(Sender: TObject); begin Memo1.Lines.Add('Hello from Ubuntu!'); Label1.Text := 'Button clicked at: ' + DateTimeToStr(Now); end;

这个简单界面将帮助我们验证:

  • 基础控件渲染
  • 事件响应
  • 日期时间功能

3. 配置Linux部署环境

要让Windows上的Delphi能够将应用部署到Ubuntu,需要建立连接通道。

3.1 设置PAServer连接

在Ubuntu上安装并启动PAServer:

wget https://altd.embarcadero.com/releases/studio/21.0/21.0.38860.1461/LinuxPAServer21.0.tar.gz tar -xzf LinuxPAServer21.0.tar.gz cd PAServer-21.0/ ./paserver

在Delphi中配置连接:

  1. 打开Tools → Options → Deployment → SDK Manager
  2. 添加新的Linux SDK
  3. 输入Ubuntu机器的IP地址和密码(默认端口64211)
  4. 测试连接确保成功

3.2 解决常见配置问题

首次配置可能会遇到以下问题:

  • 连接超时:检查Ubuntu防火墙设置

    sudo ufw allow 64211/tcp
  • 库路径错误:在SDK配置中添加必要的库路径:

    /usr/lib/x86_64-linux-gnu /usr/lib/gcc/x86_64-linux-gnu/7
  • 行尾符警告:编辑linux64.redistlist文件,将LF转换为CRLF

4. 编译与部署实战

一切就绪后,就可以进行实际的编译部署了。

4.1 编译Linux目标

在Delphi中:

  1. 在Project Manager中将构建配置设为Linux64
  2. 选择Build或直接Run(首次运行建议先Build)
  3. 观察编译输出窗口是否有错误

成功编译后,会在项目目录下生成Linux64/Release子目录,包含可执行文件。

4.2 部署到Ubuntu

使用paclient进行部署:

  1. 右键点击Project → Deployment → Refresh
  2. 确认要部署的文件列表
  3. 选择Project → Deploy

或者手动使用命令行:

paclient -u8 --put="Linux64/Release/Project1,Project1,1,Project1" "Ubuntu 18.04"

4.3 在Ubuntu上运行

登录Ubuntu机器,在用户主目录下应该能找到部署的应用程序:

cd ~ chmod +x Project1 ./Project1

如果一切正常,你将看到与Windows设计时一致的界面,点击按钮会触发事件并更新界面。

5. 调试与问题排查

即使前面的步骤都正确执行,实际运行时仍可能遇到问题。

5.1 常见运行时错误

  • libgtk-x11-2.0.so.0缺失

    sudo apt-get install -y libgtk2.0-0
  • OpenGL上下文创建失败: 检查Ubuntu是否安装了正确的显卡驱动,尝试:

    sudo ubuntu-drivers autoinstall
  • 字体显示异常: 安装核心字体包:

    sudo apt-get install -y ttf-mscorefonts-installer

5.2 日志收集技巧

在Ubuntu上运行前设置环境变量可获取更详细的日志:

export FMX_DEBUG=1 ./Project1 2>&1 | tee run.log

这将把运行时输出重定向到run.log文件,便于分析问题。

6. 进阶配置与优化

成功运行基础程序后,可以考虑以下增强配置。

6.1 添加Linux专有功能

利用FMXLinux特有的API,可以访问Linux系统功能。例如获取系统信息:

uses FMUX.Api; procedure TForm1.Button2Click(Sender: TObject); var Info: TLinuxSystemInfo; begin Info := GetLinuxSystemInfo; Memo1.Lines.Add('OS: ' + Info.OSName); Memo1.Lines.Add('Kernel: ' + Info.KernelVersion); end;

6.2 打包为.deb安装包

要让应用更方便分发,可以创建deb包:

  1. 在项目目录创建DEBIAN/control文件:

    Package: myfmxapp Version: 1.0 Architecture: amd64 Maintainer: Your Name <your.email@example.com> Description: My FMXLinux Application
  2. 创建打包脚本:

    mkdir -p pkg/usr/local/bin cp Project1 pkg/usr/local/bin/ dpkg-deb --build pkg myfmxapp_1.0_amd64.deb

6.3 性能优化建议

  • 在Project → Options → Building中启用优化选项
  • 减少动态库依赖,静态链接常用库
  • 对于图形密集型应用,考虑使用FMXLinux的Canvas优化选项

7. 项目结构与代码组织

当项目规模增长时,良好的代码结构尤为重要。

7.1 平台条件编译

使用IFDEF处理平台差异:

{$IFDEF LINUX} uses FMXLinux.Platform; {$ENDIF} procedure DoSomething; begin {$IFDEF MSWINDOWS} // Windows特有实现 {$ENDIF} {$IFDEF LINUX} // Linux特有实现 {$ENDIF} end;

7.2 资源文件管理

Linux和Windows对资源文件的处理方式不同。建议:

  • 将图片等资源放在单独目录
  • 使用相对路径访问
  • 在部署设置中明确包含资源文件夹

7.3 多窗体应用注意事项

  • 主窗体应最后释放
  • 模态窗体在Linux上的行为可能与Windows略有不同
  • 避免在FormCreate中做耗时操作

8. 实际项目经验分享

经过多个FMXLinux项目的实践,我总结了以下几点心得:

  • 保持Delphi和FMXLinux版本同步:混合版本常导致难以排查的问题
  • 定期清理中间文件:特别是跨平台编译时,旧的DCU文件可能引发错误
  • 利用持续集成:设置自动构建脚本,每次提交都验证Linux构建
  • 测试不同桌面环境:GNOME、KDE等环境下UI表现可能有差异

遇到最难解决的问题是Ubuntu 20.04上WebBrowser组件无法正常工作,最终发现是WebKitGTK版本兼容性问题。解决方案是明确指定使用系统自带的WebKit版本而非捆绑的库。

http://www.jsqmd.com/news/668835/

相关文章:

  • 从kHz到EHz:揭秘频率单位阶梯的换算逻辑与工程应用场景
  • Django 后台导出数据功能的实现
  • Gemini出点问题-----解决
  • 手写一个最小 Starter:从 0 到能看懂
  • 考研复习Day 16 | 数据结构与算法 --树与二叉树(上)
  • AI Agent Harness Engineering 的部署架构:单体部署、分布式部署与混合云
  • 终极BT下载加速指南:每天更新的Tracker列表让你的下载速度翻倍
  • FastAPI 项目 PyInstaller 打包 exe 全踩坑根治教程(Windows 全电脑通用分发)
  • 企业云盘选型标准合同条款:数据归属/服务等级/SLA全解析
  • 探究分享从对话到执行:OpenTiny NEXT 如何重塑前端智能化开发范式
  • STM32 IAP升级踩坑实录:BootLoader跳转失败、向量表重置、Flash分区冲突,我是如何解决的?
  • ControlSizePyQt - PyQt 版本的统一尺寸和颜色管理系统
  • 网络工程师必看:H3C与华为认证体系的前世今生及备考选择指南
  • 淘一个二手铷原子钟并用起来的过程
  • 从卖不出去到月入15000,贵阳这两家公司凭什么让销售翻身? - 精选优质企业推荐官
  • 一文看懂推荐系统:排序09:Field-aware Factorization Machines (FFM) 的工业界冷思考:为何从FM到FFM的改进叫好不叫座?
  • uni-app怎么实现弹窗 uni-app自定义模态框遮罩层【代码】
  • ESP32上传图片到巴法云,除了HTTPClient,你还可以试试这个库
  • 频谱分析仪
  • Qt Quick项目实战:用KDDockWidgets 1.4.0为你的QML界面添加可拖拽停靠面板(附源码)
  • C语言学习日志
  • 学习分享数据结构对比
  • Spring Boot 自动装配原理(面试版 + 实战理解版)
  • 老年人扎堆学AI,背后藏着千亿级银发经济新蓝海
  • 别再让Quartus默认的1GHz时钟坑了你!手把手教你为FPGA点灯工程写SDC约束文件
  • 通风系统节能改造笔记:用PLC分段控制替代PID,稳定风压还省电(含现场数据对比)
  • 【2026年最新600套毕设项目分享】微信小程序的小说实体书商城(30106)
  • RKNN模型在RK3588上初始化失败?别慌,可能是你的虚拟环境和开发板版本对不上
  • AI开发-python-langchain框架(--pdf文件分页加载 )
  • Polkadot 技术栈地图 2026