前言
对于Lazarus跨平台开发接触有一段时间了,虽然踩了不坑,但仍觉得已踩过的坑不过是九牛一毛。不过还是应该记录一下,以备忘,以后又踩新坑了再补充吧。
环境
| 项目 | Linux | Windows |
|---|---|---|
| 操作系统 | Debian 12 | Win10 |
| CPU架构 | x86_64 | x86_64 |
| 桌面环境 | xfce 4 | / |
| 输入法 | fcitx 5 | 系统自带 |
| GUI环境 | gtk2/qt5/qt6 | win32/gtk2/qt5 |
| 目标程序 | 64位 | 32位/64位 |
-
Qt6Pas1.dll未能得到,win + qt6未测试 -
linux 64位系统未能设置好32位运行环境,未测试 -
qt5未能得到64位的dll,未测试
坑
windows
-
Application.MessageBox按钮文字英文,无法直接本地化,Windows.MessageBoxAPI可以 -
TPageControl组件自带的关闭按钮在win32下不可用,gtk2和qt5正常 -
qt5下,某些组件会有很诡异的现象 -
gtk2下,64位目标程序运行时报错 -
gtk2下,默认界面很丑,需要用皮肤 -
带GUI的dll机制和行为与delphi不一致 -
使用
ShareMem单元需要自行构建fpcmemdll.dll
linux
-
gtk2版IDE无法输入中文;目标程序可正常输入(SynEdit不可以,必须修改相关源码) -
qt5和qt6版IDE可输入中文,但部分字无法输入,也无法正常输入多于两个字的词组;目标程序存在相同的问题 -
qt5版IDE及目标程序所需要的libqt5pas一定要和编译用的IDE版本匹配
总结
基于有限的测试经验,得出了以下结论:
-
虽然
Lazarus是跨平台的,并且号称一次编写,到处编译,但GUI的跨平台表现是不完全一致的,需要分别处理 -
整体上,
gtk2兼容性和稳定性优于qt -
最佳的开发方案:在
windows系统上开发,然后交叉编译或在目标环境下进行编译(若使用了SynEdit,必须修改相关源码) -
保持跨平台一致性的方案:
windows平台采用32位的gtk2+皮肤,linux平台采用gtk2+皮肤