[gelöst] Wieso meckert der Compiler hier?

Rund um die LCL und andere Komponenten
Antworten
Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1822
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

[gelöst] Wieso meckert der Compiler hier?

Beitrag von fliegermichl »

Ich versuche gerade die Demo von fpc-libsodium zu compilieren und da meckert der Compiler.

Wieso?
2026-08-31_10-19-09.png
2026-08-31_10-19-09.png (65.73 KiB) 283 mal betrachtet
Zuletzt geändert von fliegermichl am Mo 31. Aug 2026, 15:08, insgesamt 1-mal geändert.

Benutzeravatar
Zvoni
Beiträge: 724
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz/FPC fixes)
CPU-Target: 64Bit
Wohnort: BW

Re: Wieso meckert der Compiler hier?

Beitrag von Zvoni »

Hast du mal Zeile 13 auskommentiert?

Mich überrascht eher, dass der Compiler durch die Zeilen geht, die eigentlich ignoriert werden sollen.

EDIT: Gerade getestet. Meckert auch bei mir.
Es ist definitiv das {$elseif xxxx}
Muss also irgendwas mit dem Parser sein.

Weil das hier funktioniert

Code: Alles auswählen

//{$define STATICLINK}

{$ifndef STATICLINK}
  {$ifdef WIN32}
    const lib = 'libsodium.dll';
  {$else}
      {$if defined(WIN64)}
        const lib = 'libsodium64.dll';
      {$else}
        {$fatal dynamic lib for this target not defined}
      {$endif}
  {$endif}
{$else}
  {$ifdef WIN32}
    {$linklib libsodium.a}
    {$linklib libkernel32.a}
    {$linklib libmsvcrt.a}
    {$linklib libgcc.a}
    {$linklib libadvapi32.a}
  {$else}
    {$if defined(WIN64)}
      {$linklib libsodium.a}
      {$linklib libkernel32.a}
      {$linklib libmsvcrt.a}
      {$linklib libgcc.a}
      {$linklib libadvapi32.a}
    {$else}
      {$fatal static libs for this target missing}
    {$endif}
  {$endif}
{$endif}       
EDIT2: Hab was gefunden: https://forum.lazarus.freepascal.org/in ... ic=50056.0
Ich werd doof.....
{$elseif Defined(yyy)} funktioniert NUR, wenn das erste if mit {$IF Defined(xxx)} beginnt.

{$ifdef xxx} gefolgt von einem {$elseif Defined(yyy)} funktioniert nicht

Das hier kompiliert

Code: Alles auswählen

//{$define STATICLINK}

{$ifndef STATICLINK}
  {$IF Defined(WIN32)}
    const lib = 'libsodium.dll';
  {$ELSEIF defined(WIN64)}
    const lib = 'libsodium64.dll';
  {$ELSE}
    {$fatal dynamic lib for this target not defined}
  {$ENDIF}
{$else}
  {$if defined(WIN32)}
    {$linklib libsodium.a}
    {$linklib libkernel32.a}
    {$linklib libmsvcrt.a}
    {$linklib libgcc.a}
    {$linklib libadvapi32.a}
  {$elseif defined(WIN64)}
    {$linklib libsodium.a}
    {$linklib libkernel32.a}
    {$linklib libmsvcrt.a}
    {$linklib libgcc.a}
    {$linklib libadvapi32.a}
  {$else}
    {$fatal static libs for this target missing}
  {$endif}
{$endif} 
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1822
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Wieso meckert der Compiler hier?

Beitrag von fliegermichl »

Danke,

ich habe es jetzt auf die Variante {$if defined(win32)} umgestellt. Da klappt es.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 7429
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: [gelöst] Wieso meckert der Compiler hier?

Beitrag von af0815 »

Das {$IFDEF xxx } ist laut Usermanual hauptsächlich für das Konfigurationsfile da und es wird nur bis {$ELSE} oder {$ENDIF} gesucht, also nichts mit anderen Kayworten . Hier im Programmersguide https://docs.freepascal.org/docs-html/c ... gsu31.html wird hin und wieder darauf hingewiesen das man {$IF xx} nehmen soll, dann erst funktioniert alles besser, weil das scheinbar mehr Syntax kann. Aber in der Beschreibung auch von denselben Einschränkungen von {$ELSE} oder {$ENDIF} gesprochen wird, aber nicht von {$ELSEIF}.
Interessant, auch im Kapitel 2.4.1 wird nichts von der Syntax mit {$ELSEIF} gesprochen. Da ist die Doku schon ein wenig komisch.

Ok, habe ich auch etwas dazugelernt.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1822
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: [gelöst] Wieso meckert der Compiler hier?

Beitrag von fliegermichl »

Wenn ich so darüber nachdenke, ist es ja auch logisch.

Code: Alles auswählen

{$ifdef win32}  // kann ja nur true oder false geben, also macht ein $elseif an der Stelle keinen Sinn. Nur das {$else}

Benutzeravatar
theo
Beiträge: 11399
Registriert: Mo 11. Sep 2006, 19:01

Re: [gelöst] Wieso meckert der Compiler hier?

Beitrag von theo »

Bleibt die Frage, unter welcher FPC Version/Einstellung die fpc-libsodium Demo jemals kompiliert hat.

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1822
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: [gelöst] Wieso meckert der Compiler hier?

Beitrag von fliegermichl »

theo hat geschrieben: Mo 31. Aug 2026, 17:31 Bleibt die Frage, unter welcher FPC Version/Einstellung die fpc-libsodium Demo jemals kompiliert hat.
Das steht nirgends. Ich hab mal einen Issue aufgemacht.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 7429
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: [gelöst] Wieso meckert der Compiler hier?

Beitrag von af0815 »

fliegermichl hat geschrieben: Mo 31. Aug 2026, 18:04 Das steht nirgends. Ich hab mal einen Issue aufgemacht.
Fibonacci ist IMHO auch im englischen Forum aktiv.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

PascalDragon
Beiträge: 1048
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: Wieso meckert der Compiler hier?

Beitrag von PascalDragon »

Zvoni hat geschrieben: Mo 31. Aug 2026, 12:51 Mich überrascht eher, dass der Compiler durch die Zeilen geht, die eigentlich ignoriert werden sollen.
Was meinst du wie der Compiler das $ENDIF findet? Zumindest die Compiler Expressions müssen syntaktisch korrekt sein (Delphi meckert bei Problemen dort auf ähnliche Art).
FPC Compiler Entwickler

Benutzeravatar
Zvoni
Beiträge: 724
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz/FPC fixes)
CPU-Target: 64Bit
Wohnort: BW

Re: Wieso meckert der Compiler hier?

Beitrag von Zvoni »

PascalDragon hat geschrieben: Mo 31. Aug 2026, 22:32
Zvoni hat geschrieben: Mo 31. Aug 2026, 12:51 Mich überrascht eher, dass der Compiler durch die Zeilen geht, die eigentlich ignoriert werden sollen.
Was meinst du wie der Compiler das $ENDIF findet? Zumindest die Compiler Expressions müssen syntaktisch korrekt sein (Delphi meckert bei Problemen dort auf ähnliche Art).
AHHHH......OK, ergibt natürlich Sinn.
Noch viel zu früh am morgen......
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.

Antworten