Wie funktioniert h2pas

Für Fragen von Einsteigern und Programmieranfängern...
Warf
Beiträge: 2226
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Wie funktioniert h2pas

Beitrag von Warf »

wennerer hat geschrieben: Sa 1. Nov 2025, 20:39
sudo ln -s -f /lib/x86_64-linux-gnu/libstdc++.so.6.0.33 /usr/bin/libstdc++.so
Hat auch nicht funktioniert (was ich nicht verstehe).
Weil das nach /usr/lib nicht nach /usr/bin muss

Aber eigentlich müsste die C++ toolchain die du installiert hast das ganze mit installieren.

wennerer
Beiträge: 642
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
CPU-Target: x86_64-linux-gtk2

Re: Wie funktioniert h2pas

Beitrag von wennerer »

Danke für die Info! Aber warum steht dann in der Warnung usr/bin. Leuchtet mir auf Anhieb nicht ein.

Viele Grüße
Bernd

Warf
Beiträge: 2226
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Wie funktioniert h2pas

Beitrag von Warf »

Ah ich sehe wo die Verwirrung herkommt.

Das Problem ist das Folgende, der Compiler baut nicht die Anwendung, er baut jede Unit einzeln in sog. "Object Files" (die .o Dateien) die haben noch referenzen auf Symbole aus anderen Units. Dann werden all die Object Files einem anderen Programm übergeben, dem Linker. Dieser Linker löst dann die Referenzen auf. Der sieht z.B. Unit1.o benutzt die Funktion "Test", die liegt in Unit2.o also verknüpft (linkt) er das zusammen.

Der Linker ist ein Programm das in /usr/bin/ liegt und "ld" heißt. Neben den Object Files kann man dem Linker noch Bibliotheken geben damit er weiß Welche der Symbole in keinem der Object Files liegen sondern zur Laufzeit aus der Bibliothek geladen wird. das geht mit dem Parameter "-l" (l wie library)
Deshalb die Fehlermeldung:
Warning linker: /usr/bin/ld: -lstdc++ kann nicht gefunden werden: Datei oder Verzeichnis nicht gefunden
Das sagt dir das Linker Programm "/usr/bin/ld" (du kannst auch andere Linker benutzen, so gibts z.B. noch gold oder lld) hat den Fehler geworfen das er "-lstc++" nicht nutzen/finden kann. wenn da steht -lXYZ bedeutet das er sucht nach libXYZ.so in /lib, /usr/lib oder im LD_LIBRARY_PATH. Wenn die Datei dort nicht liegt kommt die oben genannte Meldung

wennerer
Beiträge: 642
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
CPU-Target: x86_64-linux-gtk2

Re: Wie funktioniert h2pas

Beitrag von wennerer »

Ich danke dir recht herzlich für Erklärung!

Viele Grüße
Bernd

Mathias
Beiträge: 7086
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Wie funktioniert h2pas

Beitrag von Mathias »

Code: Alles auswählen

Warning: linker: /usr/bin/ld: -lstdc++ kann nicht gefunden werden: Datei oder Verzeichnis nicht gefunden
Da habe ich mich auch schon zig mal gefragt, wieso dieser Fehler unter Linux kommt. Es wird sogar gemotzt, wen die passende "-dev" fehlt.
Bei Windows wird anstandslos gelinkt, auch wen die passende DLL fehlt. Windows motzt erst, wen man die exe ausführen will, was auch logisch ist.
Anscheinend ist der Linker von Windows intelligenter als der von Linux.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Warf
Beiträge: 2226
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Wie funktioniert h2pas

Beitrag von Warf »

Naja der Linker in Windows kann keinen Fehler werfen, weil der FPC unter Windows keinen Linker verwendet :D
Wie bereits schon gesagt ist das konzept Object Files und Linking etwas das aus dem ELF Format rausfällt. Windows verwendet das nicht. Windows verwendet das PE Format, da sind die Spielregeln nunmal anders. Deshalb baut der FPC nicht wie unter Linux nur Object Files und linkt die dann zusammen, sondern macht alles selbst inklusive dem Linking. Dabei hat der FPC natürlich auch zusätzliche Infos aus dem Pascal code und weiß was wo definiert ist und was fehlt. Diese Info hat der Linux Linker nicht Sprachspezifisch ist kann der nicht wissen was wo definiert ist.

Es gibt zwar Sprachen die auch unter Windows einen Linker verwenden, und Microsoft stellt z.B. für ihren C++ compiler auch einen bereit und der FPC könnte auch darauf zurückgreifen, aber das wichtige ist das bei Windows der nicht Notwendig ist, weil das PE Format ohne externe Linker auskommt. ELF hingegen nicht.
Es ist nunmal eine gänzlich andere Platform mit einem gänzlich anderen System

Antworten