登录 用户中心() [退出] 后台管理 注册
   
您的位置: 首页 >> SoftHub关联区 >> 主题: [新ui/govcl]⭐govcl / lazarus 在 macos 下不再折腾的原因 -- 附踩过的坑的列表     [回主站]     [分站链接]
[新ui/govcl]⭐govcl / lazarus 在 macos 下不再折腾的原因 -- 附踩过的坑的列表
clq
浏览(67) - 2024-06-24 14:22:47 发表 编辑

关键字:

[2024-06-24 14:34:52 最后更新]
[新ui/govcl]⭐govcl / lazarus 在 macos 下不再折腾的原因 -- 附踩过的坑的列表

要总结的话,这个责任 govcl,lazarus,freepascal,macos 都得负责。相对来说 govcl 最冤,其实它之下的软件问题比较多,不过它也确实有些东西没做完善。

分成三组总结吧。

1.基本确定是 macos 的问题的部分

1.1
编辑器 (edit) 不按 mac app 目录结构无法输入的问题。
这真的非常搞笑,认真研究后却觉得非常诡异。因为 xcode 自己的项目如果是命令行项目的话,生成的 edit 也是无法输入的!
幸亏我会一点 objectc ,写了实例证实这个问题后就没有再去研究试图在 govcl 和 lazarus/lcl 源码层面去解决这个问题了。

1.2
Xcode 无法签名其他程序编译好的 app 。它非得自己编译一部分。这就导致 govcl、webkit 等于的程序基本上很难上苹果商店。
苹果应该更开放。出一个自动签名、上传到苹果商店的软件给大家用有什么不好呢?

2.freepascal 的原因

2.1
可能不是 fpc 编译器本身的原因。但肯定至少和它的运行库有关。
具体表现为在当前版本编译出来的 govcl 无法在控件中响应某些按键,而降低版本编译则是可以的(需要改不少代码,我花了不少时间的)。
这样独立的编译出来的程序是可以运行的,但是编译为 golang 的动态库后,在 app 中会报 'CheckSynchronize called from non-main thread "$%x"'
这只在低版本中报错,联想起 govcl 作者说的,要启动线程模式才能正常。估计是线程实现上兼容性有问题。
这个问题无法修复,因为我发现它是在 fpc 的源码中报错的。详情如下


--------------------------------------------------------
SCheckSynchronizeError = 'CheckSynchronize called from non-main thread "$%x"';

在文件 /usr/local/Share/fpcsrc 中,和 lcl 是不同的。也就是说这是 fpc 的问题,那就没得改了。

/usr/local/Share/fpcsrc/rtl/objpas/classes/classes.pas

只有一个地方用到了
function CheckSynchronize(timeout : longint=0) : boolean;

{ assumes being called from GUI thread }
var
ExceptObj: TObject;
tmpentry: TThread.PThreadQueueEntry;

begin
result:=false;
{ first sanity check }
if Not IsMultiThread then
Exit
{$ifdef FPC_HAS_FEATURE_THREADING}
{ second sanity check }
else if GetCurrentThreadID<>MainThreadID then
raise EThread.CreateFmt(SCheckSynchronizeError,[GetCurrentThreadID]);

--------------------------------------------------------
联想起 energy 作者说的,lcl 库无法和 gtk 同时使用。原因应该也差不多。

这是最致命的问题,我也是因为这个原因放弃 macos 下的 govcl/lazarus/lcl/fpc 技术栈的。因为不能和原生代码共存,很多功能是用不了的。
而 qt 这样的库是可以的(至少安卓下),甚至最新的 delphi 11 也是可以调用安卓 jar 原生代码的。

我想,这也许是有解决办法的,但是在当前 pascal 本身就弱势的情况下,很难查找到解决的办法。还是算了吧,我直接用原生全部重写好了。


3.govcl 自身的问题

作者说没有太多的问题好改了。估计是他的应用场景比较单一。我放到 app 中问题很多的,下面列一些。虽然都是小问题,但导致了它不实用。

以下都是作为库运行时在 macos 下时

3.1 作为库运行时有些按键无法响应,例如方向键。更诡异的是回车键,有些地方能用,有些地方不行。


3.2 窗口拖放大小用不了,明显卡消息,时有时无。这个的原因应该和 3.1 一样,可惜不知道是什么。用低版本 lazarus 编译 的 govcl 就可以。

3.3 某些情况下会异常退出,不过这次是独立程序时,在 app 库里好好的。windows 下也好好的。不知道是什么原因,暂时怪 govcl 好了 :) ,根据经验也有可能是我对 golang 的 gc 掌握不够。

要说的是 go 也要负一部分责任,相同的代码,似乎在 windows 下就不会因为对象 gc 异常,难道它们的 gc 机制不同。害得和碰到这种问题时只能用 mac 裸机测试,无法用 windows 统一处理。但这有一个问题,很显然这样处理后在 linux 下肯定也会有问题。比如就有反映说 lazarus 在 linux 下的 synedit 无法输入(不过我这里实际上可以)。






























总数:0 页次:1/0 首页 尾页  
总数:0 页次:1/0 首页 尾页  


所在合集/目录
新ui 更多
govcl 更多



发表评论:
文本/html模式切换 插入图片 文本/html模式切换


附件:



NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.

Copyright © 2005-2020 clq, All Rights Reserved
版权所有
桂ICP备15002303号-1