前言
对于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.MessageBox
API可以 -
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
+皮肤