Mathias hat geschrieben: So 2. Nov 2025, 09:27
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.
 
Das hat nichts mit "intelligent" zu tun, sondern mit den Anforderungen des Objektformats: Unter ELF referenziert eine Binary benötigte Bibliotheken anhand ihres 
SONAME, der 
in der Binary steht und nicht notwendigerweise mit dem Dateinamen übereinstimmen muss. Deswegen ist es auf ELF Systemen (und auch auf MACH-O Systemen aus ähnlichen Gründen) notwendig, dass die Bibliotheken vorhanden sind. Dabei wird dann auch gleich geprüft, dass alle gewünschten Symbole auch tatsächlich vorhanden sind. Bei PE findet man das halt erst zur Ladezeit der Anwendung heraus, wenn Windows sich dann über fehlende Symbole brüskiert...
Warf hat geschrieben: So 2. Nov 2025, 13:18
Naja der Linker in Windows kann keinen Fehler werfen, weil der FPC unter Windows keinen Linker verwendet  
  
Natürlich verwendet FPC einen Linker unter Windows. Nur weil der Linker 
intern ist ändert es nichts daran, dass es ein Linker ist. FPC hat auch einen internen ELF-Linker (standardmäßig deaktiviert, aber nichtsdestotrotz). Genauso kann FPC unter Windows GCCs 
ld.exe verwenden.
Warf hat geschrieben: So 2. Nov 2025, 13:18Wie 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 genauso. Dort sind die Objektdateien COFF-Dateien und die finale Binary ist dann PE/COFF. Sowohl der Microsoft Linker 
link.exe, als auch GCCs 
ld.exe wie auch FPCs interner Linker funktionieren hier ähnlich.
Warf hat geschrieben: So 2. Nov 2025, 13:18Dabei 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.
 
Nein, der interne Linker hat keine sprachspezifischen Kenntnisse, da er direkt mit den Objektdateien arbeitet und schließlich auch mit Objektdateien klarkommen muss, die nicht von FPC erzeugt wurden. Ganz davon abgesehen, dass die Schnittstelle zum Linker die gleiche ist, unabhängig ob er intern oder extern ist, Stichwort "Abstraktion".
Warf hat geschrieben: So 2. Nov 2025, 13:18Es 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.
 
Das eine hat mit dem anderen 
null zu tun. FPC verwendet unter Windows einen internen Linker, weil der einfach schneller ist als GCCs 
ld.exe.