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+皮肤

2024-08-07 21:57:25 · 1 分钟 · 慢步道人

在Debian上使用Lazarus的Qt5问题

事件 环境 项目 值 操作系统 Debian 12 桌面环境 xfce 4 输入法 fcitx 5 背景 最早在Debian上安装Lazarus是直接sudo apt install lazarus,即使用的是官方仓库的版本,也是戏称为万年不更新版。默认安装的是Gtk2版,该版存在中文输入法问题(输入法问题可参照解决Debian上Lazarus输入法问题);也可以把IDE改为Qt5版,同样可以使用中文输入法。 想用最新版Lazarus 3.4,直接在官网下载最新的deb包,没有安装成功。 后来使用的是fpcupdeluxe-x86_64-linux安装,即Gtk2版,但是由于官方并没有合并中文输入法的解决方案,每次升级都要再做一遍,麻烦。 现在,准备使用fpcupdeluxe-x86_64-linux-qt5直接安装Qt5版。 问题 直接使用fpcupdeluxe-x86_64-linux-qt5安装,报错: 1 ./fpcupdeluxe-x86_64-linux-qt5: error while loading shared libraries: libQt5Pas.so.1: cannot open shared object file: No such file or directory 是因为缺少libQt5Pas.so.1,安装libqt5pas-dev包: 1 sudo apt install libqt5pas-dev 再次安装,又报错: 1 ./fpcupdeluxe-x86_64-linux-qt5: symbol lookup error: ./fpcupdeluxe-x86_64-linux-qt5: undefined symbol: QGuiApplication_setFallbackSessionManagementEnabled 先安装Gtk2版,再修改为Qt5版,编译还报错。编写普通的应用,编译为Qt5版,同样报错。 安装官方仓库的Lazarus 2.2,一切正常。 解决 去github上查看fpcupdeluxe相关的issues,说是要下载1.2.15版的libqt5pas,并安装: 1 sudo apt install ./libqt5pas1_2.15-1_amd64.deb ./libqt5pas-dev_2.15-1_amd64.deb 进一步查看,其实是因为Qt5删除/更新了部分接口导致不兼容了,而Debian 12的官方仓库中并未包含该更新,所以需要手动下载安装,Debian 13的官方仓库中已经包含了,像以前一样直接安装即可。...

2024-08-04 16:37:12 · 1 分钟 · 慢步道人

使用fpcupdeluxe安装配置Lazarus

前言 之前的配置Lazarus免重装和Lazarus开发环境配置主要是针对windows平台的,同样也适用于linux平台,只是需要稍微变通一些。当然,由于linux平台本身的多样性,自然也会有一些特殊的坑,例如:解决Debian上Lazarus输入法问题。 在交流中,群友们也多次提到并推荐用fpcupdeluxe,体验了下,直观的感受就是——非常适合折腾!当然,不用来折腾的话也是非常方便的。 准备工作 访问GitHub 该问题请自行解决。 安装Git fpcupdeluxe是直接从源码构建Lazarus的,而Lazarus及fpc的源码是托管在GitLab上的,其本身依赖的工具又是在GitHub上,因此Git是必不可少的。安装可参考Git的基本使用。 下载fpcupdeluxe 可以在fpcupdeluxe的Releases页选择合适的版本下载fpcupdeluxe。linux平台注意要给予执行权限。 安装 核心IDE安装 建议专门建一个目录用于安装,例如就叫fpcupdeluxe,然后把下载的fpcupdeluxe文件放入,并运行。首次运行会有是否记录日志的提示,依据自己情况选择。 配置界面语言及安装路径,建议与fpcupdeluxe安装文件相同。 点Stable/稳定版本(也可选择其它版本),确认后即可自动下载依赖,然后完成基本IDE的安装。如果安装失败了,排除问题后,再次操作3.即可。 对于linux,可能会提示缺少依赖,如: 1 2 3 4 5 6 7 8 9 10 [Info] Checking dev-libs for gtk2 LCLWidgetType. [Error] Missing library: [Error] libX11.so [Error] libgdk_pixbuf-2.0.so [Error] libpango-1.0.so [Error] libcairo.so [Error] libgdk-x11-2.0.so [Warning] You need to install at least libx11-dev libgtk2.0-dev libcairo2-dev libpango1.0-dev libxtst-dev libgdk-pixbuf2.0-dev libatk1.0-dev libghc-x11-dev to build Lazarus !! [Warning] Make, binutils and git are also required !...

2024-07-21 14:20:33 · 1 分钟 · 慢步道人

解决Debian上Lazarus输入法问题

从其它平台迁移而来 环境 项目 值 操作系统 Debian 12 桌面环境 xfce 4 输入法 fcitx 5 问题 在Lazarus的代码编辑器中,快速录入时会出现连击现象 在Lazarus的代码编辑器中无法输入中文 解决 问题1 安装fcitx5-frontend-gtk2即可,详见fcitx5 issues #1006 问题2 参照秋·风大佬中文输入法的解决方案。如果使用的是搜狗输入法的话,参照秋·风大佬搜狗输入法输入词组的解决方案。 补充1 使用fpcupdeluxe安装Lazarus,源码修改后使用git diff生成补丁文件,后期升级Lazarus后若输入法不能用可直接应用补丁,避免重复修改。 生成补丁文件 1 2 cd lazarus git diff > ~/linux_gtk2_ime.diff 应用补丁 如下图进行设置后,更新FPC+Lazarus即可。 以下是Lazarus 3.4的补丁文件内容。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 diff --git a/components/synedit/lazsyngtk2imm....

2024-04-03 20:41:30 · 2 分钟 · 慢步道人

在Lazarus中使用代码模板

从其它平台迁移而来 在Delphi中,可以使用CnPack中代码助手的功能,实现快速编写基础代码,专注于写具体业务、逻辑代码。在Lazarus中,也可以使用代码模板功能,实现相同的需求。 使用方法 将光标移到需要录入代码的位置 按Ctrl+J快捷键,弹出代码模板列表 选择要使用的模板,Enter回车 若模板需要填写参数,可在代码模板插入后,按Tab键在各参数间切换并修改,最后按Esc键或将光标移到其它位置 在模板生成的代码的基础上继续编写代码 注意: 可以先输入部分/完整代码模板的Token,然后再按快捷键;也可以按过快捷键后,继续输入Token剩余部分进一步过滤;当然,也可以组合使用。 先输入Token再按快捷键时,若可唯一确定模板,则会直接应用而不弹出模板列表。 自定义模板 Lazarus默认了一批模板,可以在菜单Tools->Code Templates ...中进行查看。 若感觉默认模板不合适,可自行修改;若默认模板无法满足使用,也可自行添加。 简要说明 Module:当前使用的代码模板,默认是主配置目录下的lazarus.dci,可点右侧按钮选用其它模板。 Templates:所选代码模板的具体清单,格式为:Token - "说明"。右侧三个按钮用于对模板清单进行维护。 其余部分:所选模板项的详细信息。 最下方的编辑区:代码模板的具体内容,$开头的表示使用的宏代码,|表示模板插入后光标的位置。 Keep indentation:保持代码模板内容的缩进,勾选后代码模板首行在光标处插入,除首行外的缩进量保持原样插入(类似行模式插入);否则模板首行外的内容与首行保持相对缩进(类似列模式插入)。 Enable Macros:启用宏代码,点Insert Macro可插入预定义的宏。 Auto complate on:自动完成,类似于事件触发,即满足条件后无需按Ctrl+J快捷键直接应用模板。 line break:按回车键时触发 space:按空格键时触发 tab:按Tab键时触发 word end:输入结束字符时触发,可暂时理解为输入;时触发 do not complate selection:暂时还不清楚具体效果 do not add character:可与前四种结合使用,勾选后不会把用来触发的字符插入到代码中,否则会插入用来触发的字符

2023-05-27 21:12:44 · 1 分钟 · 慢步道人

Lazarus发布v2.2.6版本

从其它平台迁移而来 2023-03-09,Lazarus 团队宣布发布 Lazarus 2.2.6 版本,这是一个错误修复版本,使用 FPC 3.2.2 构建。 大概在Lazarus 2.2.6发布的第二天吧,就把自己电脑上的Lazarus升级到最新了,一直以来都是这个习惯,基本上从来没怎么关心过具体都更新了哪些内容。 不过,这次心血来潮,把发行日志给大致看了下,看了之后还是有点小收获的,在此记录一二。 版本号 Lazarus是IDE,最终完成编译的是FPC,两者的版本号管理策略和Linux内核的策略类似。以下为笔者总结,实际的版本号管理策略未考证。 版本号格式如下: 1 [主版本号].[次版本号].[修订版本号] 其中,次版本号和修订版本号,奇数为开发版,偶数为稳定版。 发行日志 Lazarus 2.2.x发行日志原文。可以看到,这是2.2.0的发行日志,并非2.2.6的发行日志,说明这是按次版本号统一整理的。 由于内容较多,而且部分内容笔者也没接触/使用过,所以,只拣熟悉的或感觉比较重要的拿出来分享一下。 LazUtils包 移除PasWStr单元 原因:只有当编译器版本低于3.0才包含代码。 补救:不要再使用PasWStr LCL包 TValueListEditor 旧行为:允许在键列中使用当前的NameValueSeparator(默认情况下:=)。 新行为:不能在键列中使用名称值分隔符。如果在键列中键入名称值分隔符,焦点将移动到值列。如果将其粘贴到列中,它将被删除(没有任何反馈或警告)。 Screen添加了三组新方法 BeginTempCursor / EndTempCursor、BeginWaitCursor / EndWaitCursor和BeginScreenCursor / EndScreenCursor用于临时光标更改,而不是直接设置Screen.Cursor属性。 TGroupBox,TRadioGroup,TCheckGroup Win32旧行为:可以设置属性颜色,它直接显示。 Win32新行为:如果要更改颜色,则必须设置ParentBackground := False; TFrame Win32旧行为:无法更改TFrame的颜色。 Win32新行为:如果要更改颜色,则必须设置ParentBackground := False; T(Float)SpinEdit 新增了EditorEnabled属性,以禁用编辑中的直接用户输入。如果设置为False,则用户只能使用微调器或箭头键更改值。 Debugger LazDebugger-FP (FpDebug) v1.0成为Windows和Linux默认的调试器。 GDB(mo)使用修改版的GDB 9.2 笔者补充:FpDebug无法调试dll,需要使用GDB 组件 OpenGL全面支持Qt5的widgetset。 TSpinEditEx 新属性ThousandSeparator允许显示插入了千位分隔符的值。 TFloatSpinEditEx 支持以科学计数法形式的文本进行录入。 新属性DisplayMode,用于控制是否使用科学记数法。 新属性property控制以科学记数法显示值时使用的精度。 还有其它许多更改,详细请看原文。

2023-04-06 20:43:52 · 1 分钟 · 慢步道人

Lazarus开发环境配置

从其它平台迁移而来 前言 做为一个桌面应用开发者,工作中一直使用的是Delphi(是语言,也是IDE,基于pascal语言),无论是经典的D7,还是现下最新的XE,都有着还算丰富的使用经验吧,虽然这两者都各有优缺点。做为团队开发成员之一,具体使用什么,几乎是没什么选择权的,毕竟公司有自己的技术栈,当然还有相应的技术债。 但是,做为一个个人开发者,还是比较喜欢严谨的pascal语言的(其实Go的一些语法就是借鉴pascal的,比如:类型在变量右侧),而且还有着那么多年的开发经验,理论上来说,写个小工具啊什么的,还是应该选择熟悉的Delphi才是,但是Delphi并不符合个人的选择条件: 不要太重量级 有当前比较流行的特性 有相对活跃的社区 D7以现在的眼光来看,绝对算是足够轻量级的,整个环境(不含三方组件)安装完还不到1G,但是是毕竟是二十年前的东西了,不说新特性,一些陈年bug就够喝一壶了。 相对来说,XE却是一直在更新着,新特性是有了,但是仅安装包就7~9G,只安装桌面开发必须的自带组件,安装完也有15G+,而且正版授权巨贵,社区版限制又巨多。 至于有相对活跃的社区这条,国外应该还行,但对英文渣渣来说还是有点难了;而国内,Delphi都是快绝迹的语言了,当我什么都没说吧。 所以,选来选去,也就只剩开源的Lazarus和CodeTyphon(基于Lazarus)了。原本是看中了CodeTyphon的,但是死活在Bug10上安装不成功,也就只能选Lazarus了,不过Lazarus倒也是越用越顺心了。 虽说Lazarus标榜的一次编写,到处编译,不过,实际用到的几乎都是windows平台,至于其它平台,有机会再说吧。 开发环境 以下以Lazarus 2.2.4为例。 安装IDE Lazarus有32位版本和64位版本,而且都互相有对方架构的插件包,个人尝试后还是觉得分别安装两个版本比较合适(不要质疑,真的可以同时安装多个版本,不同架构、不同版本号都可以)。 由于Bug10不愧是Bug10,所以个人还是喜欢整成免安装版本,万一哪天Bug10作妖,就不怕重新折腾了。 在非系统盘下手动创建目录,比如D:\lazarus和D:\lazarus\config,前者是IDE的安装目录,后者是IDE的配置目录 下载并运行安装包 在选择目标位置这一步时,选择之前手动创建的安装目录,同时勾选创建一个新的第二的安装(不要质疑,哪怕是第一次安装),下一步 到选择配置文件夹这一步,选择之前手动创建的配置目录,然后一路下一步 安装完之后,把安装目录备份一下,再把IDE卸载了,然后把安装目录恢复了(当然,这一步也可以不做) 运行lazarus.exe,首次运行时(包括未来重装系统后)会弹出Welcom to Lazarus IDE的窗口,其中Fppkg项会有叹号(似乎是2.2版本之后才有的),点Restore Fppkg configuration,再点Write new configuration files,最后点Start IDE 可以为lazarus.exe创建快捷方式 至此,IDE就算是安装完了,需要的话可以把安装目录整个压缩备份,不过个人还是建议把IDE配置好了再备份 IDE配置 构建配置 由于Lazarus每次安装三方组件都要重新build,如果三方组件装得多了,IDE的exe会很大(不是你自己写的exe),而个人又是比较喜欢小巧的,所以这一步是少不了的。 菜单Tools->Configure "Build Lazarus" Profile to build项选择Optimized IDE 点Build会立即重新构建IDE;点Save Settings仅保存配置,下次构建时生效 一体式窗口 安装完之后,IDE默认是D7那种分离式窗口,在小分辨率屏幕的时代很有用,不过现在嘛,个人感觉还是一体式窗口比较舒服。Lazarus已经提供了这样的包,只不过默认并没有启用。 菜单Package->Install/Uninstall Packages ... 右侧选择AnchorDockingDsgn 1.0,点Install selection或双击 点Save and rebuild IDE重新构建,IDE重启之后就是一体式的窗口了 拖动子窗口的标题,会自动吸附,调整为自己喜欢的布局,重启IDE即可 此时,若是不小心把布局调乱了,就不好恢复了,所以可以考虑把自动保存布局功能给关了: 菜单Tools->Desktops ...,去掉Auto save active desktop的勾,关闭 其它配置 菜单Tools->Options ...是IDE集中的配置,可依自己习惯或喜好进行配置。不过,倒是可以分享些个人的配置及相应的考虑,以供参考:...

2023-02-25 23:52:38 · 1 分钟 · 慢步道人

Windows + VS Code搭建 Go 开发环境

从其它平台迁移而来 想学golang也就是Go语言由来已久,但苦于不像Delphi、C#这等有现成的IDE,第一步就卡壳了。所幸网上资源丰富,在尝试后终于把环境搭起来了,在此做个记录以备忘。 安装 Git 安装Go Tools时需要用到。而且,搞开发不用Git?图样图森破! Git 官网(Git for windows 国内镜像),安装略。若已安装WSL则可直接使用WSL里的Git。 安装 golang 由于众所周知的原因,Go的官网并不总是能访问,其实在国内是有一个官方镜像的。下载安装什么的就略过了。 环境变量 安装好之后在命令行里运行go env即可查看Go环境变量。 GOROOT:就是Go的安装目录,如C:\Go。 GOPATH:Go的工程目录,不能是Go的安装目录,可以有多个目录,多个目录之间用;分隔,且下面安装的Go Tools会安装在第一个目录。如:C:\Users\Administrator\go。 安装 VS Code 下载VS Code,并安装,没什么好说的。 安装配置中文:打开VS Code,按Ctrl+Shift+P,输入display,选择Configure Display Language回车,选择zh-cn回车,若无则选择Install additional languages...回车,在左侧选择中文安装,安装完之后根据提示重启。 按Ctrl+Shift+X搜索Go,安装微软的Go插件。 关闭VS Code。 安装 Go Tools 旧方案 主要是完全由VS Code来下载速度会异常感人。 打开命令行依次执行以下语句 1 2 3 4 ::下载tools git clone https://github.com/golang/tools.git %GOPATH%\src\golang.org\x\tools ::下载lint git clone https://github.com/golang/lint.git %GOPATH%\src\golang.org\x\lint 待全部下载完之后,打开VS Code。 Ctrl+N新建一个文档,选择语言模式为Go,会有Analysis Tools Missing的提示,点Install坐等完成(共11个),安装完成之后查看是否全部成功,最后重启VS Code。 重启后在刚才新建的文档里写上go代码并保存,按F5调试,验证效果。 自备梯子后,可直接运行以下批处理进行Go Tools的安装。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 ::代码补全 go get -v github....

2019-06-15 18:35:12 · 2 分钟 · 慢步道人