Die Loesung fuer das Problem hast Du ja schon bekommen, es fehlen die *-devel Pakete. Ich will hier noch ein paar Sachen erklaeren: ro999@gmx.net schrieb am 23.02.05 21:22:50:
- - - s n i p p - - - Making all in wrudf make[1]: [...] gcc -g -O2 -o wrudf wrudf.o wrudf-cmnd.o wrudf-desc.o wrudf-cdrw.o wrudf-cdr.o ide-pc.o ../libudffs/.libs/libudffs.a -lreadline -lncurses /usr/lib/gcc-lib/i586-suse-linux/3.3.4/../../../../i586-suse-linux/bin/ld: cannot find -lreadline collect2: ld returned 1 exit status make[1]: *** [wrudf] Fehler 1 make[1]: Leaving directory `/usr/local/udftools-1.0.0b3/wrudf' make: *** [all-recursive] Fehler 1 - - - s n a p p - - -
Wenn ich das richtig verstehe, dann sucht "make" unter /usr/lib/gcc-lib/i586-suse-linux/bin/ld nach einer Datei "-lreadline", die er nicht finden kann, oder? (wird an der Stelle auch nach "-lncurses" gesucht?)
"make" ist hier nur am Rande im Spiel, die eigentliche Fehlermeldung kommt nicht von make selbst. Make ist ein Programm, mit dem man grosse (oder auch kleine) Projekte verwalten kann, in dem es Dateien gibt, die untereinander eine Abhaengigkeit besitzen. Klassisches Beispiel sind Quellcode-Dateien *.c und die Header-Dateien *.h - wenn sich eine Header-Datei aendert, so muessen alle *.c Programme, die diese Header- Datei einbinden, neu uebersetzt (compiliert) werden. Die Regeln, nach denen make vorgeht, sind in einem sog. Makefile definiert. Man kann es selbst schreiben, oft werden die Makefiles allerdings durch "automake" im Zuge eines ./configure-Laufes erstellt. Make ruft, um die eigentliche Arbeit zu erledigen, externe Programme auf. In Deinem Beispiel hat make das Programm "gcc", das Frontend fuer die Compiler Collection, aufgerufen. Was genau ist dann nun schief gegangen? Dazu muss man die Fehlermeldung genau lesen und etwas Hintergrund- wissen haben. Am Besten faengt man hinten an:
collect2: ld returned 1 exit status
Aha, ein Programm namens "ld" hat sich beendet und dabei einen Return- Code von "1" geliefert. Das bedeutet, es ist ein Fehler aufgetreten, sonst waere der Return-Code "0". Das Programm "ld" ist der Linker (Binder), der aus Object-Dateien und einigem anderen Material letztendlich das Binary (Programm) erzeugt, das Du ausfuehren kannst (ld kann natuerlich noch mehr als das, aber in diesem Falle hier sollte eine ausfuehrbare Datei gelinkt werden). Weiter im Text:
cannot find -lreadline
Das ist die eigentliche Fehlermeldung. Es wird etwas nicht gefunden. Die Frage ist nun, was hier nicht gefunden wird. Wenn man den Befehl anschaut, der ausgefuehrt wurde, wird es vielleicht klarer:
gcc -g -O2 -o wrudf wrudf.o wrudf-cmnd.o wrudf-desc.o wrudf-cdrw.o wrudf-cdr.o ide-pc.o ../libudffs/.libs/libudffs.a -lreadline -lncurses
Es wurde also "gcc" ausgefuehrt mit einigen Optionen, hier taucht auch das "-lreadline" auf, was in der Fehlermeldung steht. Wenn Du "man gcc" liest, wirst Du feststellen, dass "-l" eine Option ist, mit der man dem Frontend "gcc" mitteilen kann, dass bei einem Linker-Aufruf doch bitteschoen eine gewisse Bibliothek oder ein gewisses statisches Archiv zu verwenden ist. Was man nun wissen muss ist, dass die eigentliche Datei, die gesucht wird, nicht etwa einfach "readline" heisst, sondern "libreadline.so" oder "libreadline.a", je nachdem, ob dynamisch oder statisch gelinkt wird. Bei der Option -l werden das Praefix und das Suffix der Datei weggelassen! In diesem Moment weisst Du nun, welche Datei genau fehlt und kannst YaST2 oder pin bemuehen und nach der Datei suchen. Beide Programme werden Dir dann mitteilen (so hoffe ich jedenfalls), dass Du die bereits genannten *-devel Pakete installieren musst. Solche oder aehnliche Fehlermeldungen gibt es haeufig beim Compilieren, Linken usw. Wenn man erst einmal verstanden hat, wie man sie zu lesen hat, ist es eigentlich relativ einfach, die Fehler zu beheben - natuerlich nicht in allen Faellen, aber bei solch einfachen Sachen wie hier, wo nur eine Datei fehlt, dann schon. Ich hoffe, das hilft Dir oder vielleicht auch anderen weiter. Gruesse, Thomson