Wieso xxx-dev für FPC installieren ?

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

Wieso xxx-dev für FPC installieren ?

Beitrag von Mathias »

Wieso muss ich vielfach auch bei FPC die xxx-dev Packete installieren ?
ZB. "libsdl1.2-dev" wen ich SDL in Lazarus verwenden will.
Eine fertige EXE braucht diese xxx-dev nicht mehr.

Ich dachte immer, die xxx-dev seien nur da, um die *.H für C/C++ zu installieren.
Und FPC greift direkt auf die *.o zB. libSDL.so

Was habe ich da übersehen, das ich in Lazarus auch die xxx-dev brauche ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6200
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: Wieso xxx-dev für FPC installieren ?

Beitrag von af0815 »

Ganz einfach, die Distributionen (nicht das Lazarus Team !!) haben entschieden, das manche Links und Software halt nur in den *-dev Paketen enthalten sind. Wenn das statisch verwendet wird, so ist in der ausführbaren Datei der Code hineingelinkt. Blöd ist es zum Beispiel bei manchen DBs. Dort wird im *-dev Paket zB. nur ein weiterer Links gesetzt, damit der allgemeine Treibername gefunden wird und nicht das was gerade in normalen Paket gerade aktuell ist.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

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

Re: Wieso xxx-dev für FPC installieren ?

Beitrag von theo »

In diesem Falle geht es mMn nur um den SymLink.
Bei SDL heisst die gesuchte Lib aus mir unbekannten Gründen für FPC 'libSDL.so'.
$ELSE ist dann 'libSDL-1.2.so.0'. Mit letzterem würde es mMn auch ohne zusätzliche Massnahmen klappen.
Den Symlink kann man nat. auch manuell machen, ohne "devel".

Code: Alles auswählen

{$IFDEF UNIX}
{$IFDEF DARWIN}
...
{$ELSE}
  {$IFDEF FPC}
  SDLLibName = 'libSDL.so';
  {$ELSE}
  SDLLibName = 'libSDL-1.2.so.0';
  {$ENDIF}
{$ENDIF}
{$ENDIF}   

PascalDragon
Beiträge: 825
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 xxx-dev für FPC installieren ?

Beitrag von PascalDragon »

Mathias hat geschrieben:
Do 29. Dez 2022, 16:11
Ich dachte immer, die xxx-dev seien nur da, um die *.H für C/C++ zu installieren.
Und FPC greift direkt auf die *.o zB. libSDL.so
Die *-dev Pakete installieren die Header und den Symlink von der lib*.so zur lib*.so.X.Y. Die Import Units von FPC sind versionsunabhängig gestaltet (Ausnahmen bestätigen die Regel), weswegen eben der Symlink der aktuellen Version der Bibliothek in der Distribution nötig ist. Nach dem Linken enthält die generierte ELF Datei dann einen Verweis auf die lib*.so.X.Y, statt die lib*.so, weswegen der Symlink nicht mehr nötig ist.
FPC Compiler Entwickler

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

Re: Wieso xxx-dev für FPC installieren ?

Beitrag von Mathias »

@PascalDragon und @theo
Danke, gut erklärt.
Somit schon wieder so ein Gewurstel it C/C++.
Immerhin schreibt FPC einigermassen was fehlt. Aber man muss diese Regel im Kopf haben.

Wen dies kommt

Code: Alles auswählen

Warning: linker: /usr/bin/ld: -lSDL_net kann nicht gefunden werden: Datei oder Verzeichnis nicht gefunden
Muss man das "-I" weglassen und dafür vorne "lib" anhängen und alle klein schreiben. Dann mit "TAB" drücken
Beispiel"sudo apt install libsdl-net" --> [TAB] und dann muss man in der Auswahl nach einer xxx-dev" suchen und man wird meistens fündig.
Ein Anfänger hat da echt Mühe.

Für @Theo, es gibt sogar eine libsdl-pango, somit trifft man Pango auch in sdl an.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten