Lazarus跨平台方案总结
前言 对于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+皮肤