gcc und readline

HUE

Well-Known Member
Hallo,

kann mir jemand bei dem Problem helfen.

Ich habe einen Quelltext "rl.c" mit folgendem Kopf:

#include <stdio.h>
#include <stdlib.h>
#include <readline/readline.h>
#include <readline/history.h>

int
main (void)
{

das Programm kompiliere ich so:

gcc -Wall -L/usr/pkg/lib -I/usr/pkg/include -lreadline -o rl rl.c

Die Übersetzung läuft ohne Fehler.

Beim Starten von "rl" kommt folgender Fehler:

Shared object "libreadline.so.5" not found

Was ist da verkehrt und wie kann ich dies beheben.

MfG

HUE
 
Hi,

ich kenne NetBSD nicht, aber wenn Du beim Linken (mit GCC) schon /usr/pkg/lib explizit angeben musst, dann vermute ich, dass der Pfad vom Laufzeit-Linker nicht durchsucht wird. Was genau Du wissen musst, steht in der man Page zu ldconfig.

Eine Alternative, bzw. die vermutlich "richtige" Lösung, ist es, die Bibliothek mit den unter NetBSD üblichen Tools (pkgsrc?) zu installieren, so dass sie in den Standardverzeichnissen für Bibliotheken liegt. Dann brauchst Du auch den -L Parameter für GCC nicht mehr. Beachte, dass es bei Ports/Packages/Wie-man-das-in-NetBSD-Land-auch-nennt oft eine "normale" Version und eine "Devel" Version gibt. Letztere installiert sowohl die nötigen Header als auch die "rohen" Bibliotheken (*.a), die vom Linker gebraucht werden.
 
Guten Abend,

ich benutze NetBSD 3.0 und habe readline aus den pkgsrc installiert. Im Pfad
-I/usr/pkg/include gibt es das Verzeichnis readline mit den *.h Dateien.

Ebenso unter -L/usr/pkg/lib die Datei libreadline.so aber als Link auf die Datei libreadline.so.5.0.2.

Ist das vielleicht der Fehler?
 
Guten Abend,

ich habe wieder ein ähnliches Problem, bei der beim Aufruf von ./main die Bibliothek nicht gefunden wird.

Leider weiss ich meine Lösung für das readline Problem, welches ich hier postete nicht mehr.

Ich suche noch einen Tipp.


Code:
Makefile
gcc -g -v -Wall -o main -I/usr/pkg/include -lusb -L/usr/pkg/lib main.c

Code:
main.c
#include <stdio.h>
#include <usb.h>

Fehlermeldung beim Aufruf von ./main

Shared object "libusb-0.1.so.4" not found

MfG

HUE \a
 
LD_LIBRARY_PATH sollte man nie verwenden (müssen). Wenn doch, ist das System ziemlich schlecht konfiguriert, die Informationen aus dem Netz, die es propagieren, sind inzwischen obsolet. Dir fehlt vielleicht einfach ein -L

inzwischen ist es ja eine ganz andere Bibliothek. Existiert diese? Wenn ja, wo? füg mal nen parameter -L$ORT vor -lusb hinzu.
 
Moin,

ich habe nochmal das Makefile geändert, die Reihenfolge von -Lbla -lbla getauscht.

Ich hänge nochmal das Logfile von der Compilierung an.


Der Fehler ist der gleiche geblieben.

MfG

HUE \a
 

Anhänge

  • main.txt
    1,2 KB · Aufrufe: 351
hast du mit ldconfig rumgespielt? es unterscheidet sich sehr von dem in linux, also nicht einfach aufrufen ;)
 
Hallo,

nein, ich habe keine Programme hinsichtlich der Veränderung von Einstellungen von Bibliotheken verwendet.

Ich habe nur das Programm aus dem Internet kopiert, da hat es eine Funktion am USB Port zu erfüllen, dann habe ich nach meinem Verständnis das Makefile erstellt.

Die Kompilierung verläuft ja auch friedlich, der Aufruf des kompilierten Programmes bringt den genannten Fehler.

Andere Programme, die die gleiche Bibliothek benutzen, funktionieren ja!

Hier habe ich noch ein paar Hinweise auf das Laden der Bibliotheken:
Code:
$ ldd /usr/pkg/bin/avrdude
/usr/pkg/bin/avrdude:
        -lc.12 => /usr/lib/libc.so.12
        -lusb-0.1.4 => /usr/pkg/lib/libusb-0.1.so.4
        -lm.0 => /usr/lib/libm.so.0
        -ltermcap.0 => /usr/lib/libtermcap.so.0
        -lreadline.6 => /usr/pkg/lib/libreadline.so.6

Code:
$ ldd /home/wolfram/source/c/usb/main
/home/wolfram/source/c/usb/main:
        -lusb-0.1.4 => not found
        -lc.12 => /usr/lib/libc.so.12

Wenn Ihr mir nochmals helfen könntet, wäre ich Euch sehr dankbar.

MfG

HUE \a
 
Hallo,
wenn es nicht zu viel Aufwand ist, kannst ein kleines Paket zusammenschnüren mit makefile und gekürzten Quelldatei, damit ich das Problem reproduzieren kann.
 
Also wenn ich in der Konsole eingebe:
Code:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/pkg/lib

Startet das Programm und gibt bei mir aus(Gedankennotiz)
Code:
Trying to local the Luxeed Led Keyboard
Not found!

getestet auf NetBSD 5.99.39
 
'n Abend,

ich hab jetzt die Lösung, der Schalter -R /usr/pkg/lib hat gefehlt.

Anbei nun das komplette Makefile.

Vielen Dank Euch allen!

MfG

HUE \a
 

Anhänge

  • Makefile.txt
    97 Bytes · Aufrufe: 375
Zurück
Oben