首页 > 其他分享 >用fpc trunk(3.3.1) 编译TMS FNC控件时出现INTERNAL 20231102

用fpc trunk(3.3.1) 编译TMS FNC控件时出现INTERNAL 20231102

时间:2024-12-04 10:23:52浏览次数:6  
标签:控件 TMS fpc localsymtable SKIP 编译 trunk

由于fpc  trunk一直在增强及调整,用不同时间段的fpc都可能存在兼容问题,如这次用fpc trunk(3.3.1) 编译TMS FNC控件时出现Internal 20231102,之前的能通过编译的。用最新的fpc编译LCLTMSFNCCorePkg.lpk时出现以下错误:

 在fpc源码发现以下一段文字:如果使用泛型等复杂的情况下,localsymtable为nil也可能会出现,但仍然会产生有效的代码,为了允许在这种情况下继续,可以定义SKIP_INTRAL20231102跳过就可以。

            if pu.u.in_interface then
              begin
                {
                  MVC: The case where localsymtable is also nil can appear in complex cases and still produce valid code.
                  In order to allow people in this case to continue, SKIP_INTERNAL20231102 can be defined.
                  Default behaviour is to raise an internal error.
                  See also
                  https://gitlab.com/freepascal.org/fpc/source/-/issues/40502
                }
                {$IFDEF SKIP_INTERNAL20231102}
                if (pu.u.localsymtable<>Nil) then
                {$ELSE}
                if (pu.u.localsymtable=Nil) then
                  internalerror(20231102);
                {$ENDIF}
                  symtablestack.push(pu.u.localsymtable);
              end
            else
              internalerror(200705153)

解决方法:
打开\fpcsrc\compiler\fpcdefs.inc
添加定义:{$define SKIP_INTERNAL20231102}

{$mode objfpc}
{$asmmode default}
{$modeswitch advancedrecords}
{$H-}
{$goto on}
{$ifndef DISABLE_INLINE}
  {$inline on}
  { Inline small functions, but not when EXTDEBUG is used }
  {$ifndef EXTDEBUG}
    {$define USEINLINE}
  {$endif EXTDEBUG}
{$endif}
{$interfaces corba}

//复杂的泛型跳过INTRAL20231102过
//在复杂的情况下,localsymtable也为nil的情况可能会出现,但仍然会产生有效的代码。
//为了允许在这种情况下继续,可以定义SKIP_INTRAL20231102。
{$DEFINE SKIP_INTERNAL20231102}

{ This reduces the memory requirements a lot }
{$PACKENUM 1}
{$PACKSET 1}

{ We don't use exceptions, so turn off the implicit
  exceptions in the constructors }
{$IMPLICITEXCEPTIONS OFF}

修改后重新编译fpc(我用fpcupdeluxe重新编译fpc),fpc编译完成后,在lazarus就可以编译tms fnc控件包(LCLTMSFNCCorePkg.lpk)。
这个方法不一定是最佳方案,如您有更好的方法也请与我分享,谢谢!

 

 

标签:控件,TMS,fpc,localsymtable,SKIP,编译,trunk
From: https://www.cnblogs.com/qiufeng2014/p/18585733

相关文章

  • B4X编程语言:B4X控件的背景色属性(Color/Background)
             B4A控件的背景色属性有两个:Color和Background,B4XView类型控件无论在B4A还是B4J,都只有Color属性。B4J其它控件没有背景色属性,要获取和设置其背景色属性,需使用As(B4XView)方法。        一、Color属性        Color属性的值类型是Int型。......
  • B4X编程语言:B4X控件的字体属性(Font / Typeface)
            除B4XView类型的控件外,B4A控件的字体属性是Typeface,B4J控件的字体属性是Font。B4XView类型的控件无论在B4A、B4J还是B4i中,其字体属性均是Font。    一、B4A控件的字体属性Typeface        Typeface属性用于设置或获取B4A控件文本字体,获取字......
  • B4X编程语言:B4A控件内容对齐方式属性Gravity详解
            Gravity属性用于设置控件的内容在控件内的对齐方式,使用Gravity属性可以对控件的内容进行灵活的对齐设置,以适应不同的界面布局需求。在B4A中,Label、Button、Imageview等控件均有Gravity属性。        Gravity属性如下:    LEFT:将内容左对齐。......
  • 界面控件DevExpress Blazor UI v24.1新版亮点:图表组件功能全面升级
    DevExpress BlazorUI组件使用了C#为BlazorServer和BlazorWebAssembly创建高影响力的用户体验,这个UI自建库提供了一套全面的原生BlazorUI组件(包括PivotGrid、调度程序、图表、数据编辑器和报表等)。DevExpress Blazor控件目前已经升级到v24.1版本了,此版本发布了全新升级了图......
  • DevExpress-独立使用的控件介绍-02
    XtraEditors库提供了只能独立使用的控件,即这些控件只能依附于其他控件配合使用,不能单独使用。这些控件包括:几种类型的列表控件、数据导航控件、滚动条和一个按钮控件,这些控件都是继承于BaseStyleControl,因此支持所有Dev控件共有的样式、外观与感觉、以及工具提示机制,为应用......
  • WPF+MVVM案例实战与特效(三十一)- 封装一个加载动画的自定义控件
    文章目录1、案例效果2、案例实现1、资源与文件创建2、自定义控件封装3、自定义控件使用4、总结1、案例效果2、案例实现在开发WPF应用程序时,我们常常需要一个灵活的加载动画控件,该控件可以根据窗口的大小自动调整其内部元素(如图片、边框和文本)的尺寸,并......
  • Winform窗体控件双向绑定数据模拟读写PLC数据
    1.用Modbus工具模拟PLC2.创建一个实体类点击查看代码internalclassData:INotifyPropertyChanged{ushort[]ushorts=newushort[10];publicushortD0{get=>ushorts[0];set{ushorts[0]=value;OnPropertyChanged(nameof(D0));}}publicushor......
  • 界面控件DevExpress WPF v24.2新功能预览 - 人工智能(AI)集成
    DevExpressWPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpressWPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。无论是Office办公软件的衍伸产品,还是以数据为中心......
  • 怎样去除iOS和Android中的输入URL地址的控件条呢?
    在iOS和Android中完全去除浏览器自带的地址栏是不可能的,除非你开发的是一个独立的应用程序,而不是在浏览器中运行的网页。如果你的目标是在Web应用中提供更沉浸式的体验,隐藏地址栏可以实现,但用户仍然可以通过下拉或其他操作重新显示地址栏。以下是一些方法可以尝试在你的......
  • Android 简单控件
    创建一个新模块chapter03:创建成功:在模块chapter03中创建一个布局:布局文件的内容:<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_pare......