【问题标题】:What does this Error mean : Undefined symbol: THREADVARLIST_STRINGS这个错误是什么意思:未定义的符号:THREADVARLIST_STRINGS
【发布时间】:2024-01-12 08:10:01
【问题描述】:

我刚开始学习 Free Pascal,我编写了这个相当基本的程序来练习数组。我收到两个错误:

Strings.lpr(32,1) 错误:未定义符号:THREADVARLIST_STRINGS

Strings.lpr(32,1) 错误:未定义符号:STRINGS_STRPAS$PCHAR$$SHORTSTRING

Strings.lpr(32,1) 致命:编译模块时出现 2 个错误,正在停止

代码如下:

program Strings;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes, SysUtils
  { you can add units after this };

{$R *.res}
var
  Marks : array [1..10] of Integer;
  index : Integer;
begin
  for index:= 0 to 10 do
  begin
    write('Enter mark of student ',index,': ');
    readln(marks[index]);
  end;

  for index := 0 to 10 do
  begin
    write('Student No. ',index,'   Marks: ',marks[index],'   ');
    if marks[index]>65 then writeln('PASS')
    else writeln('FAIL');
  end;

  writeln('Press any key to continue.');
  readln;
end. {line 32}

【问题讨论】:

  • 嗯,我希望代码看起来更丰富多彩。
  • 显然你需要为此添加delphi标签。
  • 是的,@Marco,但将问题标记为“delphi”表明它实际上与 Delphi 有关,但这里并非如此。不要仅仅为了语法高亮而标记问题。在问题中使用the language-specification syntax。 Prettify 荧光笔仍然不支持特定于 Pascal 或 Delphi 的高亮规则,所以我们只能使用通用规则。

标签: arrays pascal undefined-symbol


【解决方案1】:

不要命名您的程序字符串。有一个具有该名称的预编译单元。

通常意味着您创建了一个主程序,但没有链接正确的 RTL。

可能的原因:

  • 版本冲突,(编译器RTL)
  • 手动链接所犯的错误(试图从 C 中访问 Pascal?)
  • 尝试使用不支持某些语言功能的嵌入式 RTL。
  • 你的情况)一些命名冲突。但这通常很少见,并且通常被编译器捕获。因此,这种体验可能值得在 FPC 错误跟踪器中作为错误提交

【讨论】:

    【解决方案2】:

    变化:

    程序字符串;

    到:

    程序测试字符串;

    纠正错误。字符串是保留字。

    此外,您还有“按任意键”后跟 readln。 readln 等待回车。比如:

    WriteLn('按任意键继续。'); 重复 直到按键;

    可能是您正在寻找的。

    【讨论】: