Warning: linker: /usr/bin/ld: -lusb-1.0 kann nicht gefunden werden: Datei oder Verzeichnis nicht gefunden

Benutzeravatar
Garfield
Beiträge: 208
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

Warning: linker: /usr/bin/ld: -lusb-1.0 kann nicht gefunden werden: Datei oder Verzeichnis nicht gefunden

Beitrag von Garfield »

Moin, ich wollte etwas mit der libusb "spielen" und habe das Problem, dass die libusb nicht gefunden wird.

Ich habe hier ein Tuxedo Laptop mit Ubuntu 24.04, Lazarus 4.2 und fpc 3.2.2.

Das Projekt besteht bisher nur aus einem leeren Formular und:

Code: Alles auswählen

procedure TForm1.FormClose(Sender: TObject);
begin
  if (ctx <> nil)
  then libusb_exit(ctx);
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  aVersion: libusb_version;
begin
  ctx := nil;
  libusb_init(ctx);

  aVersion := libusb_get_version();

  Form1.Caption := IntToStr(aVersion.major) + '.'
                 + IntToStr(aVersion.minor) + '.'
                 + IntToStr(aVersion.micro) + '.'
                 + IntToStr(aVersion.nano);
end;     
Beim Compilieren kommt die Warnung:
Warning: linker: /usr/bin/ld: -lusb-1.0 kann nicht gefunden werden: Datei oder Verzeichnis nicht gefunden
Die libusb.pas wurde mit Freepascal installiert: /usr/share/fpcsrc/3.2.2/packages/libusb/src/libusb.pp

In Zeile 106 steht:

Code: Alles auswählen

const libusb1='libusb-1.0.so';
ldconfig findet eine libusb-1.0.so.0:
fran@fran-TUXEDO-BC1510-1710:~$ ldconfig -p | grep libusb
libusbmuxd-2.0.so.6 (libc6,x86-64) => /lib/x86_64-linux-gnu/libusbmuxd-2.0.so.6
libusb-1.0.so.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libusb-1.0.so.0
libusb-0.1.so.4 (libc6,x86-64) => /lib/x86_64-linux-gnu/libusb-0.1.so.4
libhidapi-libusb.so.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libhidapi-libusb.so.0
fran@fran-TUXEDO-BC1510-1710:~$
Ich dachte, dass es reichen würde die "libusb.pp" als "libusb.pas" ins Projektverzeichnis zu kopieren und die Zeile 106 zu korrigieren. Funktioniert leider nicht. Selbe Warnung.

In den Ordnern "/lib/x86_64-linux-gnu" und "/usr/lib/x86_64-linux-gnu" liegen "libusb.so", "libusb-0.1.so.4", "libusb-0.1.so.4.4.4", "libusb-1.0.so.0" und "libusb-1.0.sp.0.4.0".

Im Projektverzeichnis sind verschiedene *.res-Dateien. Die scheinen Suchverzeichnisse zu listen. Zum Beispiel:
SEARCH_DIR("/usr/lib/x86_64-linux-gnu/")
libusb-dev ist installiert.
fran@fran-TUXEDO-BC1510-1710:~$ sudo apt install libusb-0.1-4 libusb-dev usbutils
[sudo] Passwort für fran:
Paketlisten werden gelesen… Fertig
Abhängigkeitsbaum wird aufgebaut… Fertig
Statusinformationen werden eingelesen… Fertig
libusb-0.1-4 ist schon die neueste Version (2:0.1.12-35build1).
libusb-dev ist schon die neueste Version (2:0.1.12-35build1).
usbutils ist schon die neueste Version (1:017-3build1).
0 aktualisiert, 0 neu installiert, 0 zu entfernen und 11 nicht aktualisiert.
fran@fran-TUXEDO-BC1510-1710:~$
Im Moment weiß ich nicht weiter.
Gruß Garfield

Benutzeravatar
Garfield
Beiträge: 208
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: Warning: linker: /usr/bin/ld: -lusb-1.0 kann nicht gefunden werden: Datei oder Verzeichnis nicht gefunden

Beitrag von Garfield »

Da habe ich nun mehrere Tage gesucht, den obigen Beitrag erstellt und dann weiter gesucht.

Der Befehl scheint falsch zu sein:
:~$ sudo apt install libusb-0.1-4 libusb-dev usbutils
Hab dann sinngemäß dass gefunden:
~$ sudo apt install libusb-1.0-0 libusb-1.0-0-dev usbutils
Damit funktioniert das bisschen Quelltext nicht, aber die libusb wird gefunden. Die ldconfig sagt aber nichts anderes.

:shock: :evil:
Gruß Garfield

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

Re: Warning: linker: /usr/bin/ld: -lusb-1.0 kann nicht gefunden werden: Datei oder Verzeichnis nicht gefunden

Beitrag von Mathias »

Ich habe es so probiert, läuft auf Anhieb mit Linux Mint. sogar mit wine läuft es.

Code: Alles auswählen

uses
  libusb;

var
  ctx: plibusb_context;
  v: plibusb_version;
begin
  libusb_init(ctx);
  v := libusb_get_version;
  WriteLn('Version: ', v^.major, '.', v^.minor, '.', v^.micro);
  libusb_exit(ctx);
end.  
Versuche mal dies hier, ob dies geht:

Code: Alles auswählen

// gcc main.c -o main -lusb-1.0

#include <stdio.h>
#include <stdlib.h>
#include <libusb-1.0/libusb.h>

int main() {
    const struct libusb_version *version = libusb_get_version();

    printf("libusb version: %d.%d.%d.%d\n",
           version->major,
           version->minor,
           version->micro,
           version->nano);

    return 0;
}
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
Garfield
Beiträge: 208
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: Warning: linker: /usr/bin/ld: -lusb-1.0 kann nicht gefunden werden: Datei oder Verzeichnis nicht gefunden

Beitrag von Garfield »

Moin, Matthias.

vielen Dank für Deine Antwort.

Du verwendest Pointer. Ich bin nach der Deklaration in der "/usr/share/fpcsrc/3.2.2/packages/libusb/src/libusb.pp" gegangen. Dort gibt es keine:

Code: Alles auswählen

function libusb_get_version():libusb_version;LIBUSB_CALL;external libusb1;
Hab die libusb.pp noch einmal in mein Projektverzeichnis als libusb.pas kopiert und das "p" eingefügt:

Code: Alles auswählen

function libusb_get_version():plibusb_version;LIBUSB_CALL;external libusb1;
Dann noch meinen Quelltext nach Deinem Vorbild angepasst und schon wird mir Version 1.0.27.11882 angegeben.

Ich hätte mir doch die "libusb.h" ansehen sollen. Für das weitere werde ich das mal tun.
Gruß Garfield


Benutzeravatar
Garfield
Beiträge: 208
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: Warning: linker: /usr/bin/ld: -lusb-1.0 kann nicht gefunden werden: Datei oder Verzeichnis nicht gefunden

Beitrag von Garfield »

Vielen Dank theo. Nach so einer Quelle habe ich nicht gesucht. Auf die Idee war ich nicht gekommen. Die Datei ist etwas größer und funktioniert.
Gruß Garfield

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

Re: Warning: linker: /usr/bin/ld: -lusb-1.0 kann nicht gefunden werden: Datei oder Verzeichnis nicht gefunden

Beitrag von theo »

Garfield hat geschrieben: So 9. Nov 2025, 11:55 Nach so einer Quelle habe ich nicht gesucht. Auf die Idee war ich nicht gekommen.
Gerade bei FPC Quellen ist das für mich die erste Anlaufstelle (wenn nicht FPC trunk installiert ist).
FPC stable kann schon recht alt sein.
Garfield hat geschrieben: So 9. Nov 2025, 11:55 Die Datei ist etwas größer und funktioniert.
Das sind auch noch Änderungen enthalten bei:

Code: Alles auswählen

function libusb_get_device_list(ctx:plibusb_context;var list:plibusb_device):ssize_t;LIBUSB_CALL;external libusb1;
procedure libusb_free_device_list(list:plibusb_device;unref_devices:integer);LIBUSB_CALL;external libusb1;
und noch ein paar kleinere Anpassungen.

Benutzeravatar
Garfield
Beiträge: 208
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: Warning: linker: /usr/bin/ld: -lusb-1.0 kann nicht gefunden werden: Datei oder Verzeichnis nicht gefunden

Beitrag von Garfield »

Ich hatte Lazarus installiert und um Aktualisierungen kümmerte ich mich erst wenn eine neuere Version verfügbar war. Die installierten Dateien sind zumeist von Mitte 2021. Nicht mehr besonders frisch. Da scheine ich wohl einen Fehler zu machen.

Die Geräteliste ist ein wichtiger Punkt. Und mit libusb_hotplug_callback muss ich mich dann auch beschäftigen.
Gruß Garfield

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

Re: Warning: linker: /usr/bin/ld: -lusb-1.0 kann nicht gefunden werden: Datei oder Verzeichnis nicht gefunden

Beitrag von Mathias »

Garfield hat geschrieben: So 9. Nov 2025, 10:25 Moin, Matthias.

vielen Dank für Deine Antwort.

Du verwendest Pointer. Ich bin nach der Deklaration in der "/usr/share/fpcsrc/3.2.2/packages/libusb/src/libusb.pp" gegangen. Dort gibt es keine:

Code: Alles auswählen

function libusb_get_version():libusb_version;LIBUSB_CALL;external libusb1;
Hab die libusb.pp noch einmal in mein Projektverzeichnis als libusb.pas kopiert und das "p" eingefügt:

Code: Alles auswählen

function libusb_get_version():plibusb_version;LIBUSB_CALL;external libusb1;
Dann noch meinen Quelltext nach Deinem Vorbild angepasst und schon wird mir Version 1.0.27.11882 angegeben.

Ich hätte mir doch die "libusb.h" ansehen sollen. Für das weitere werde ich das mal tun.
Das mit dem Pointer ist das einte Problem.
Aber was jetzt komisch ist, das er auf einmal linken kann, die wichtigste Zeile

Code: Alles auswählen

const libusb1='libusb-1.0.so';
ist bei beiden Versionen gleich.


Wen ich Bindungen mach, solche Sachen mache ich nie, ich mache es immer wie im C-Vorbild mit einem P-Zype ohne das var.

Code: Alles auswählen

// FPC Original
function libusb_init(var ctx:plibusb_context):integer;LIBUSB_CALL;external libusb1;

// Bei mir
function libusb_init(ctx:Pplibusb_context):integer;LIBUSB_CALL;external libusb1;
Da ist es Zufällig ein PP Type. Das sieht man im original Header mit den **.

Code: Alles auswählen

int LIBUSB_CALL libusb_init(libusb_context **ctx);
Und bei solchen Sachen nehme ich immer ein T. Das wäre dann hier ein Tlibusb_interface.

Code: Alles auswählen

    libusb_interface = record
        altsetting : ^libusb_interface_descriptor;
        num_altsetting : longint;
      end;
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
Garfield
Beiträge: 208
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: Warning: linker: /usr/bin/ld: -lusb-1.0 kann nicht gefunden werden: Datei oder Verzeichnis nicht gefunden

Beitrag von Garfield »

Mathias hat geschrieben: So 9. Nov 2025, 19:10 Aber was jetzt komisch ist, das er auf einmal linken kann, die wichtigste Zeile

Code: Alles auswählen

const libusb1='libusb-1.0.so';
ist bei beiden Versionen gleich.
Richtig. Ich hatte zuerst das Paket "libusb-dev" installiert. Damit gab es keine libusb-1.0.so und der Linker gab die Warnung aus. Dann habe ich auf Grund eines Artikels das Palet "libusb-1.0-0-dev" installiert. Danach gab es die Datei "libusb-1.0.so" und das Projekt funktionierte.

Von den anderem habe ich leider keine Ahnung. Da gucke ich immer, wie andere das machen. Vielleicht geht auch so etwas: https://www.codeconvert.ai/c-to-pascal-converter
Gruß Garfield

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

Re: Warning: linker: /usr/bin/ld: -lusb-1.0 kann nicht gefunden werden: Datei oder Verzeichnis nicht gefunden

Beitrag von Mathias »

Von den anderem habe ich leider keine Ahnung. Da gucke ich immer, wie andere das machen. Vielleicht geht auch so etwas: https://www.codeconvert.ai/c-to-pascal-converter
Den kenne ich, der ist einiges schlechter als ChatGPT.

Ich arbeite immer möglichst C-Kombustibel. Wen man mit P Typen anstelle von var macht, kann man C-Beispiele fast 1:1 übernehmen.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
Garfield
Beiträge: 208
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: Warning: linker: /usr/bin/ld: -lusb-1.0 kann nicht gefunden werden: Datei oder Verzeichnis nicht gefunden

Beitrag von Garfield »

Ich bin vor zwei, drei Wochen darauf gestossen und hab den nur ein wenig ausprobiert. Kompatible zu bleiben ist wohl immer besser. Übersetzungen mache ich nur selten.
Gruß Garfield

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

Re: Warning: linker: /usr/bin/ld: -lusb-1.0 kann nicht gefunden werden: Datei oder Verzeichnis nicht gefunden

Beitrag von theo »

Mathias hat geschrieben: So 9. Nov 2025, 20:13 Ich arbeite immer möglichst C-Kombustibel.
Dieses Wort kannte ich noch nicht:

kombustibel
TECHNIK (veraltet) leicht brennbar, zur Verpuffung neigend


Autokorrektur?

Benutzeravatar
Garfield
Beiträge: 208
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: Warning: linker: /usr/bin/ld: -lusb-1.0 kann nicht gefunden werden: Datei oder Verzeichnis nicht gefunden

Beitrag von Garfield »

Mathias hat geschrieben: So 9. Nov 2025, 19:10 Wen ich Bindungen mach, solche Sachen mache ich nie, ich mache es immer wie im C-Vorbild mit einem P-Zype ohne das var.

Code: Alles auswählen

// FPC Original
function libusb_init(var ctx:plibusb_context):integer;LIBUSB_CALL;external libusb1;

// Bei mir
function libusb_init(ctx:Pplibusb_context):integer;LIBUSB_CALL;external libusb1;
Bei Johann Glaser ist das

Code: Alles auswählen

function libusb_init(out ctx:Plibusb_context):cint;extdecl;external {$ifdef windows}dllname{$endif};
https://github.com/hansiglaser/pas-libu ... libusb.pas
Gruß Garfield

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

Re: Warning: linker: /usr/bin/ld: -lusb-1.0 kann nicht gefunden werden: Datei oder Verzeichnis nicht gefunden

Beitrag von Mathias »

Bei Johann Glaser ist das
Dies sind alles so spezifische Pascal Schlüsselwörter.
Nur wen ich etwas an C anbinde, verzichte ich auf solche Sachen. Wie schon gesagt, wen auf solches verzichtet, kann man C-Beispiele fast 1:1 übernehmen.
Auch verzichte ich auf "array of const" und verwende "varargs".
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten