• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Gelöst: Meldung -lcurses nicht gefunden unter Suse 9.3

Hallo,

ich mache grad einen c-/c++ -Kurs unter Linux.
Ich bin grad beim Kapitel curses.h.
Leider kommt bei meinem Suse 9.3 beim Compilieren immer die Meldung -lcurses nicht gefunden.

Ich verwende folgenden Befehl:

Code:
g++ -g -lcurses -o test.exe test.c

Die ncurses-Bibliothek ist installiert und die Datei curses.h liegt im Verzeichnis /usr/include.

Im meinem Programm wird die curses.h mit
Code:
#include<curses.h>
eingebunden.

Ich habe den Verdacht, daß irgendwo der Pfad zu den Headerdateien nicht richtig angegeben ist, weiß aber nicht, in welcher Datei das dann stehen sollte.
Vielleicht liegts auch an was anderem.

Mit meiner Knoppix 3.8 CD funktioniert das auf jeden Fall, nur in meinem Suse 9.3 nicht.

Hat irgend jemand eine Idee was ich falsch mache, oder woran das liegen könnte?

Gruß Marc
 
firestarbl schrieb:
Ich habe den Verdacht, daß irgendwo der Pfad zu den Headerdateien nicht richtig angegeben ist, weiß aber nicht, in welcher Datei das dann stehen sollte.
"Fast" richtig. ;)

Die Header sind richtig eingebunden, sonst hättest Du einen anderen Fehler bekommen. Der Fehler, den Du da bekommst, ist ein Linker-Fehler, kein Compiler- oder Präprozessorfehler.

Woran liegt es? Unter Linux gibt es keine curses-Bibliothek. Stattdessen gibt es einen kompatiblen Klon, der aber nicht "curses", sondern "ncurses" heißt.

Also muss Deine Kommandozeile ungefähr so aussehen:
Code:
g++ -g -lncurses -o test.exe test.c
PS: Warum nennst Du das Programm "test.exe"? Unter Linux sind Dateiendungen für ausführbare Dateien unüblich. Üblicher wäre sowas hier:
Code:
g++ -g -lncurses -o test test.c
 
Danke erst mal für deine Antwort, ich werde das mit -lncurses gleich mal heute Abend ausprobieren.

traffic schrieb:
Woran liegt es? Unter Linux gibt es keine curses-Bibliothek. Stattdessen gibt es einen kompatiblen Klon, der aber nicht "curses", sondern "ncurses" heißt.
Wieso hat das dann mit meiner Knoppix CD mit -lcurses funktioniert? Wurde das da speziell irgendwo reingebaut?


Das ich die Endung .exe nicht benötige weiß ich. Da ich mich aber noch nicht so lang mit Linux beschäftige benutze ich das als kleine Hilfe für mich zum Erkennen ob das eine ausführbare Datei ist.

Gruß Marc
 
Die Bibliothek heißt auf allen Distributionen "libncurses.so", der Linker-Aufruf lautet dann "-lncurses". Manche Distributionen setzen zusätzlich einen Symlink namens "libcurses.so", dann würde alternativ auch "-lcurses.so" funktionieren.

SuSE tut das nicht, weil im termcap-Paket eine andere Bibliothek drin steckt, deren echter Name auch "libcurses.so" ist, die aber nichts mit curses zu tun hat. Würde SuSE den Symlink setzen, dann gäbe es einen Konflikt und man könnte nicht beide Pakete parallel installieren.

Davon bist Du vermutlich nicht betroffen, weil das termcap-Paket bei Dir nicht installiert ist - wäre es installiert gewesen, hättest Du ganz andere Fehler bekommen - also kannst Du, wenn Du möchtest, den Symlink auf eigene Faust setzen.

Als root:
Code:
ln -s /lib/libncurses.so.5.4 /usr/lib/libcurses.so
Ich weiß allerdings nicht, ob die Lösung wirklich optimal ist. Autoconf kann problemlos Bibliotheken unter allen möglichen und unmöglichen Namen finden - möchtest Du das nicht nutzen? Wenn nicht, hättest Du aber trotzdem mit "-lncurses" eine Lösung, die auf allen Linux-Systemen funktioniert.
 
Oben