Einbinden der libbass.so
- Garfield
- Beiträge: 184
- Registriert: Do 5. Jun 2008, 22:07
- OS, Lazarus, FPC: Ubuntu 24.04 LTS (Laz 4.2 FPC3.2.2)
- CPU-Target: 64Bit
- Wohnort: Aken
Einbinden der libbass.so
Ich habe die aktuelle bass24-linux.zip herunter geladen und wollte zum Test einen kleinen Player schreiben. Dazu habe ich die bass.pas in den Projektordner kopiert und die libbass.so in den Unterordner "lib" sowie den Ordner "lib" in den Projekteinstellungen unter Compilereinstellungen, Pfade, Bibliotheken (-FI) eingetragen. Dann habe ich die bass nur in die uses der umain.pas eingetragen und wollte sehen was passiert: Das Projekt wird kompiliert und die Ausführung mit der Fehlermeldung "Execution stopped with exit-code 127 ($007F)" abgebrochen. Das heißt, dass etwas nicht gefunden wurde.
Dann habe ich die libbass.so entfernt und der Kompiliervorgang wird mit der Nachricht "Warning: linker: /usr/bin/ld: -lbass kann nicht gefunden werden: Datei oder Verzeichnis nicht gefunden" abgebrochen.
Die Bibliothek wurde gefunden, aber der Fehler 127 sagt das Gegenteil. Muss ich die libbass.so jetzt zwingend nach "/usr/lib" verschieben oder gibt es noch eine Einstellung um das zu vermeiden?
Dann habe ich die libbass.so entfernt und der Kompiliervorgang wird mit der Nachricht "Warning: linker: /usr/bin/ld: -lbass kann nicht gefunden werden: Datei oder Verzeichnis nicht gefunden" abgebrochen.
Die Bibliothek wurde gefunden, aber der Fehler 127 sagt das Gegenteil. Muss ich die libbass.so jetzt zwingend nach "/usr/lib" verschieben oder gibt es noch eine Einstellung um das zu vermeiden?
Gruß Garfield
-
- Beiträge: 7056
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Einbinden der libbass.so
Ich wollte dem gerade nachgehen, Normalerweise kann man das -l Problem so lösen.Ich habe die aktuelle bass24-linux.zip herunter geladen und wollte zum Test einen kleinen Player schreiben.
Code: Alles auswählen
sudo apt install libxxx-dev
Brauchst du zwingend bass, oder reicht dir auch eine andere Player-lib ?
Sonst könnte ich die gstreamer empfehlen.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: Einbinden der libbass.so
Geht es denn, mit der Lib in /usr/lib oder /usr/lib64?
S.a. LD_LIBRARY_PATH
S.a. LD_LIBRARY_PATH
- Garfield
- Beiträge: 184
- Registriert: Do 5. Jun 2008, 22:07
- OS, Lazarus, FPC: Ubuntu 24.04 LTS (Laz 4.2 FPC3.2.2)
- CPU-Target: 64Bit
- Wohnort: Aken
Re: Einbinden der libbass.so
@Matthias
Eine libbass-dev gibt es nicht. In dem Downloadarchiv ist nur die libbass.so. In den Beispielen, welche ich gefunden hatte, lag die libbass.so im Projektordner. Die Bass ist kommerziell aber "BASS is free for non-commercial use."
Zwingend ist die bass nicht. Ich hatte sie nur vor Jahren unter Windows benutzt.
@theo
Wenn ich die libbass.so nach /usr/lib kopiere funktioniert es. Das wollte ich eigentlich vermeiden.
Dann sehe ich mir mal gstreamer an.
Eine libbass-dev gibt es nicht. In dem Downloadarchiv ist nur die libbass.so. In den Beispielen, welche ich gefunden hatte, lag die libbass.so im Projektordner. Die Bass ist kommerziell aber "BASS is free for non-commercial use."
Zwingend ist die bass nicht. Ich hatte sie nur vor Jahren unter Windows benutzt.
@theo
Wenn ich die libbass.so nach /usr/lib kopiere funktioniert es. Das wollte ich eigentlich vermeiden.
Dann sehe ich mir mal gstreamer an.
Gruß Garfield
Re: Einbinden der libbass.so
Warum?Garfield hat geschrieben: So 21. Sep 2025, 13:46 Wenn ich die libbass.so nach /usr/lib kopiere funktioniert es. Das wollte ich eigentlich vermeiden.
Wie angedeutet, kann man ein Startscript machen und dort den Pfad mit LD_LIBRARY_PATH setzen, wenn man unbedingt will.
https://www.geeksforgeeks.org/linux-uni ... -in-linux/
https://www.hpc.dtu.dk/?page_id=1180
- Garfield
- Beiträge: 184
- Registriert: Do 5. Jun 2008, 22:07
- OS, Lazarus, FPC: Ubuntu 24.04 LTS (Laz 4.2 FPC3.2.2)
- CPU-Target: 64Bit
- Wohnort: Aken
Re: Einbinden der libbass.so
Falls ich die Quelltexte mal weitergebe, soll es sofort funktionieren.
Gruß Garfield
- Garfield
- Beiträge: 184
- Registriert: Do 5. Jun 2008, 22:07
- OS, Lazarus, FPC: Ubuntu 24.04 LTS (Laz 4.2 FPC3.2.2)
- CPU-Target: 64Bit
- Wohnort: Aken
Re: Einbinden der libbass.so
Ich habe das jetzt ausprobiert. Leider hat es nicht funktioniert. Das heißt, die Variable wurde richtig gesetzt, aber Lazarus bringt weiter den Fehler 127.
Gruß Garfield
Re: Einbinden der libbass.so
Während der Entwicklung würde ich das sowieso nicht machen, bei der Weitergabe sollte es aber funktionieren.Garfield hat geschrieben: So 21. Sep 2025, 16:04 Ich habe das jetzt ausprobiert. Leider hat es nicht funktioniert. Das heißt, die Variable wurde richtig gesetzt, aber Lazarus bringt weiter den Fehler 127.
-
- Beiträge: 2210
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: Einbinden der libbass.so
Unter Linux ist es normalerweise nicht so das man Bibliotheken direkt mit der Anwendung mitliefert. Das ist ein Windows Ding. Die Idee bei Linux ist das man die Bibliotheken durch die Zentrale Paketverwaltung installiert. Wenn das keine Option ist gibt es den LD_LIBRARY_PATH oder containerization. Je nachdem was dir lieber ist.
Am einfachsten installierst du dir aber einfach die libbass über den Paketmanager und wenn du den Source Code weiter gibst schreibst du einfach libbass als dependency hinzu.
Das ist vor allem auch relevant da im gegensatz zu Windows Linux (bzw. genauer die LibC) nicht ABI Stabil ist. Deine Libbass die auf deinem Linux problemlos funktioniert, kann auf einem anderen Linux system gar nicht erst starten, weil es gegen eine andere LibC ABI bindet.
Damit verschiebt sich die Anforderung für die Dependencies vom Entwickler an den Nutzer. Ein Linux Nutzer muss selbst wissen wie er an die richtige Dependency für sein system kommt. Ein Arch Nutzer kann keine Dependencies für einen Debian Nutzer bereitstellen weils sehr oft einfach von den versionen und ABIs nicht passt.
Daher hat man normalerweise 3 Möglichkeiten:
1. Dependency angeben und der Nutzer mus schauen wie er dran kommt
2. Containerization
3. Bibliothek sources mitliefern und dann als Teil des Buildprozesses deiner Anwendung mitbauen
Für das dritte muss die Anwendung natürlich open source sein.
Am einfachsten installierst du dir aber einfach die libbass über den Paketmanager und wenn du den Source Code weiter gibst schreibst du einfach libbass als dependency hinzu.
Das ist vor allem auch relevant da im gegensatz zu Windows Linux (bzw. genauer die LibC) nicht ABI Stabil ist. Deine Libbass die auf deinem Linux problemlos funktioniert, kann auf einem anderen Linux system gar nicht erst starten, weil es gegen eine andere LibC ABI bindet.
Damit verschiebt sich die Anforderung für die Dependencies vom Entwickler an den Nutzer. Ein Linux Nutzer muss selbst wissen wie er an die richtige Dependency für sein system kommt. Ein Arch Nutzer kann keine Dependencies für einen Debian Nutzer bereitstellen weils sehr oft einfach von den versionen und ABIs nicht passt.
Daher hat man normalerweise 3 Möglichkeiten:
1. Dependency angeben und der Nutzer mus schauen wie er dran kommt
2. Containerization
3. Bibliothek sources mitliefern und dann als Teil des Buildprozesses deiner Anwendung mitbauen
Für das dritte muss die Anwendung natürlich open source sein.
- Garfield
- Beiträge: 184
- Registriert: Do 5. Jun 2008, 22:07
- OS, Lazarus, FPC: Ubuntu 24.04 LTS (Laz 4.2 FPC3.2.2)
- CPU-Target: 64Bit
- Wohnort: Aken
Re: Einbinden der libbass.so
Anscheinend habe ich noch einiges zu lernen. Es ist das zweite Mal, dass ich mit Bibliotheken unter Linux zu tun habe. Die erste war die libSane, für welche ein Developerpaket gab. Bei der libBass gibt es nur die libbass.so. LD_LIBRATY_PATH hat leider nicht funktioniert.
Die dritte Option geht nicht, da die Bass kommerziell und nicht offen ist. Die zweite kenne ich nicht und die erste sollte kein Problem sein.
Apt kann mit der libbass.so nichts anfangen. Mal sehen, ob ich da noch etwas herausfinden kann.
Die dritte Option geht nicht, da die Bass kommerziell und nicht offen ist. Die zweite kenne ich nicht und die erste sollte kein Problem sein.
Apt kann mit der libbass.so nichts anfangen. Mal sehen, ob ich da noch etwas herausfinden kann.
Gruß Garfield
- Garfield
- Beiträge: 184
- Registriert: Do 5. Jun 2008, 22:07
- OS, Lazarus, FPC: Ubuntu 24.04 LTS (Laz 4.2 FPC3.2.2)
- CPU-Target: 64Bit
- Wohnort: Aken
Re: Einbinden der libbass.so
Zu LD_LIBRARY_PATH. Ich hatte es so gemacht:
Am Ende der Datei habe ich eingefügt:
Dann kam
und mit
wurde der richtige Pfad wird angezeigt.
Die Datei ist
Wenn ich den Pfad in den Projekteinstellungen - Compilereinstellungen - Pfade unter Bibliotheken (-FI) eintrage, wird die Datei gefunden. Aber der Fehler 127 kommt trotzdem.
Code: Alles auswählen
nano ~/.bashrc
Code: Alles auswählen
export LD_LIBRARY_PATH=/home/fran/lib
Code: Alles auswählen
source ~/.bashrc
Code: Alles auswählen
echo $LD_LIBRARY_PATH
Code: Alles auswählen
/home/fran/lib
Code: Alles auswählen
/home/fran/lib/libbass.so
Gruß Garfield
- Garfield
- Beiträge: 184
- Registriert: Do 5. Jun 2008, 22:07
- OS, Lazarus, FPC: Ubuntu 24.04 LTS (Laz 4.2 FPC3.2.2)
- CPU-Target: 64Bit
- Wohnort: Aken
Re: Einbinden der libbass.so
Im Projektordner lagen ein paar *.res. Die hatte ich gelöscht. Jetzt habe ich eine link1689943.res.
Da ist auch der Pfad aus der LD_LIBRARY_PATH drin.
Code: Alles auswählen
SEARCH_DIR("/usr/lib/x86_64-linux-gnu/")
SEARCH_DIR("/lib64/")
SEARCH_DIR("/lib/")
SEARCH_DIR("/usr/lib64/")
SEARCH_DIR("/usr/lib/")
SEARCH_DIR("/home/fran/lib/")
SEARCH_DIR("/usr/lib/gcc/x86_64-linux-gnu/13/")
SEARCH_DIR("./")
...
Gruß Garfield
-
- Beiträge: 2210
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: Einbinden der libbass.so
Bei LD_LIBRARY_PATH musst du nicht die .so angeben sondern den Suchordner. Das ganze muss dann gesetzt sein durch den Startprozess. Am einfachsten ist du machst dir in deinem Programm die folgende Aufteilung:
Mit einer runApplication.sh die das folgende macht:
Solang dur über die runApplication.sh startest sollte es dann Funktionieren
Code: Alles auswählen
<ProjektDir>/runApplication.sh
<ProjektDir>/bin/Application
<ProjektDir>/lib/libXYZ.so
...
Code: Alles auswählen
#!/bin/bash
# Holt den Pfad wo die runApplication.sh liegt (https://stackoverflow.com/questions/59895/how-do-i-get-the-directory-where-a-bash-script-is-located-from-within-the-script)
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
# Setzen des LD_LIBRARY_PATH sodass Bibliotheken aus lib gefunden werden
export LD_LIBRARY_PATH=$SCRIPT_DIR/lib:$LD_LIBRARY_PATH
# Optional: Setze das Script verzeichnis als Arbeitsverzeichnis
# cd "$SCRIPT_DIR"
# bin/Application ausführen und dabei alle Argumente übergeben
exec "$SCRIPT_DIR"/bin/Application $@
-
- Beiträge: 7056
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Einbinden der libbass.so
Was noch eine Alternative wäre, da libbass.so sowieso nicht bei ubuntu dabei ist, die lib dynamisch mit der unit dynlibs einbinden.
Dann kannst du deine *.so mit deinem Project mitliefern, und der Anwender muss sich dann nciht darum kümmern, das irgendwie die libbass auf sein System kommt.
Dann kannst du deine *.so mit deinem Project mitliefern, und der Anwender muss sich dann nciht darum kümmern, das irgendwie die libbass auf sein System kommt.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
- Garfield
- Beiträge: 184
- Registriert: Do 5. Jun 2008, 22:07
- OS, Lazarus, FPC: Ubuntu 24.04 LTS (Laz 4.2 FPC3.2.2)
- CPU-Target: 64Bit
- Wohnort: Aken
Re: Einbinden der libbass.so
So wie es aussieht, wird die libbass.so gefunden. Denn wenn sie fehlt oder umbenannt wird, kommt die Nachricht, dass sie nicht gefunden wurde. Wenn ich alle Funktionen in der bass.pas auskommentiere, gibt es beim Kompilieren keinen Fehler. Sowie eine Funktion drin ist, kommt die 127. Als wenn die Einsprungpunkte nicht gefunden werden. Nehme ich eine andere libbass.so, bekomme ich die Nachricht, dass diese inkompatibel ist.
@Warf
Vielen herzlichen Dank. In Lazarus kommt der Error 127. Im Double Commander passiert gar nichts, wenn das Programm ausgeführt werden soll. Und mit Deinem Script startet das Programm. Jetzt muss ich nur noch den Code einfügen.
Nachtrag: Habe eine Demo genommen und ausprobiert. Lazarus bricht mit 127 ab und mit dem Script läuft es.
@Matthias
An dynamische Einbindung hatte ich auch schon gedacht. Unter Windows hatte ich das gemacht. Die unit dynlibs sagt mir noch nichts. Muss ich mal gucken.
@Warf
Vielen herzlichen Dank. In Lazarus kommt der Error 127. Im Double Commander passiert gar nichts, wenn das Programm ausgeführt werden soll. Und mit Deinem Script startet das Programm. Jetzt muss ich nur noch den Code einfügen.
Nachtrag: Habe eine Demo genommen und ausprobiert. Lazarus bricht mit 127 ab und mit dem Script läuft es.

@Matthias
An dynamische Einbindung hatte ich auch schon gedacht. Unter Windows hatte ich das gemacht. Die unit dynlibs sagt mir noch nichts. Muss ich mal gucken.
Zuletzt geändert von Garfield am Mo 22. Sep 2025, 20:22, insgesamt 1-mal geändert.
Gruß Garfield