"undefined reference to" bei graphics.h
-
Frohe Weihnachten erstmal :xmas1:
Ich habe ein Tutorial gefunden das schon etwas älter aussieht wollte es aber trotzdem mal ausprobieren. http://209.85.129.132/search?q=cache:QyUuamJ8N6wJ:www.millin.de/lp-3-89990-123-1.pdf+%22susepress.de/de/download%22&cd=2&hl=de&ct=clnk&gl=de Ich bin bis zu dem Punkt "Graphikprogrammierung unter Linux" gekommen. Ich habe mir die Dateien die ich dafür brauche heruntergeladen. Wenn ich allerdings das erste Programm kompilieren will, zeigt er mir die ganzen Funktionen wie "undefined refernece to initgraph" etc. an. Ich habe ein wenig gegoogelt und herausgefunden, dass man eine lib einbinden muss. Ich habe die lib "liblcgi.a" eingebunden brachte aber keine Veränderung kann mir da einer helfen?
PS: Ich benutze SUSE
Mit freundlichen Grüßen
-
Hallo,
hast du die Library, so wie es in dem Buch steht, auch installiert? Poste doch mal deinen Code, Fehlermeldung und Compiler-Aufruf.blan
-
Dann hast du die Bibliothek nicht richtig eingebunden
Mit:
-L<Pfad> -l<name>wobei <name> der Teil zwischen lib<name>.a/.so ist (ohne das lib und .a oder .so!) und kein Leerzeichen dazwischen!
Oder das Symbol ist wirklich nicht in der Bibliothek definiert. Mit man: nm <bibliothek> kannst du dir anzeigen lassen, welche Symbole vorhanden sind (bei C++ kannst du mit c++filt die Symbole demangeln lassen).
-
Danke schon mal! Ich glaube ich muss noch weiter vorne anfangen. Ich habe die ganze Zeit mit g++ versucht zu kompilieren weil ich irgendwo gelesen habe das das auch ginge. Wenn ich aber wie vorgeschrieben mit lcc kompilieren will, gibt der "g++: $*: Datei oder Verzeichnis nicht gefunden" aus egal was ich dahinter schreibe. Liegt warscheinlich daran, das ich das mit der Installation nicht richtig gemacht habe, Hier ist die README
Installation von LCGI ===================== Installationsvoraussetzung -------------------------- Die Graphikbibliothek LCGI setzt voraus, dass man die beiden Pakete qt und qt-devel aus der Serie xdev (ab SuSE 7.3) oder qtlib2 und qtdevel2 aus der Serie xdev (SuSE 7.2 oder früher) installiert hat. Sollte eines oder beide dieser Pakete auf Ihrem System nicht installiert sein, so müssen Sie diese zuerst installieren, bevor Sie die folgenden Installationsschritte durchführen. Installation ------------ Um die Graphikbibliothek LCGI zu installieren, müssen Sie sich als root anmelden und anschließend in das Directory wechseln, indem sich das heruntergeladene Archiv lcgi-1.0.tgz befindet. Nun müssen Sie die folgenden Schritte durchführen: 1. Entpacken des Archivs lcgi-1.0.tgz mit tar xzvf lcgi-1.0.tgz 2. Wechseln in das Directory lcgi-1.0 cd lcgi-1.0 3. Setzen des Qt-Pfads (evtl.) In der Datei install_lcgi müssen sie nur dann den Pfad der Variablen QTDIR ändern, wenn sie keine Standardinstallation vorgenommen haben. 4. Installieren von lcgi Hier haben sie zwei Möglichkeiten: 1. Möglichkeit: Sie rufen folgendes auf: ./install_lcgi oder 2. Möglichkeit: Sie rufen folgendes auf: rpm -hUv lcgi-1.0-9.suse-7.2-i386.rpm bzw. rpm -hUv lcgi-1.0-9.suse-7.3-i386.rpm 5. Beenden der root-Sitzung mit exit und Anmelden unter Ihrem Login-Namen. 6. Setzen der Variablen QTDIR und Definieren der Funktion in der Datei .bashrc Sie haben hier zwei Möglichkeiten: 1. Möglichkeit: Tragen Sie in der Datei .bashrc in Ihrem Home-Directory die folgenden Zeilen ein: export QTDIR=/usr/lib/qt2 function lcc() { g++ -pipe -Wall -W -O2 -DNO_DEBUG -I/usr/include/lcgi \ -I$QTDIR/include \$* -L$QTDIR/lib -L/usr/X11R6/lib \ -lXext -lm -llcgi -lqt -lXext -lX11; } Wenn Sie keine Standardinstallation vorgenommen haben, müssen Sie bei QTDIR= eben den Pfad angeben, in dem sich bei Ihnen Qt befindet. oder 2. Möglichkeit (nur bei Standardinstallation): Rufen Sie im Directory lcgi-1.0 das folgende Programm auf: lcgiconfig Dieses Programm trägt automatisch am Ende Ihrer .bashrc die beiden Zeilen von der 1. Möglichkeit ein. 7. Schließen Sie dann dieses Fenster und öffnen Sie es erneut, denn bei jedem Öffnen eines Terminalfensters wird automatisch der Inhalt der Datei .bashrc (im Home-Directory) gelesen. Benutzung von LCGI ================== Inkludieren von <graphics.h> ---------------------------- Da die Graphikfunktionen in der Headerdatei graphics.h deklariert sind, sollte immer #include <graphics.h> angegeben werden, wenn man von diesen Funktionen in seinem Programm Gebrauch macht. Angabe von main() mit Parametern -------------------------------- Wenn Sie in Ihrem Programm LCGI-Routinen aufrufen, müssen Sie statt int main(void) immer folgendes int main( int argc, char *argv[] ) angeben. Kompilieren und Linken von Graphikprogrammen (auf der Kommandozeile) -------------------------------------------------------------------- Wenn Sie ein Programm erstellt haben, das Routinen aus diesem Kapitel aufruft, müssen Sie dieses immer mit dem mitgelieferten Kommando lcc statt gcc bzw. cc kompilieren und linken. Wenn Sie z.B. ein Programm polygon.c entwurfen haben und dieses nun kompilieren wollen, müssen Sie z.B. folgendes aufrufen: lcc -o polygon polygon.c Das Kommando lcc bietet die gleichen Optionen an wie das Kommando gcc bzw. cc. Rufen Sie danach zum Testen polygon bzw. ./polygon (wenn sie als root angemeldet sind) auf. Kompilieren und Linken von Graphikprogrammen (mit xwpe) ------------------------------------------------------- Wenn Sie mit der integrierten Environment xwpe arbeiten, müssen Sie unter dem Menüpunkt Options-->Compiler-->C die folgenden Einträge vornehmen: Compiler: g++ ComPiler-Options: -g -I/usr/include/lcgi -I/usr/lib/qt2/include Loader-Options: -L/usr/lib/qt2/lib -L/usr/lib -L/usr/X11R6/lib -lXext -lm -llcgi -lqt -lXext -lX11 LAnguage: C File-Postfix: .c Hinweis: Sollten Sie für QTDIR einen anderen Pfad als /usr/lib/qt2 eingestellt haben, müssen Sie diesen bei den ComPiler- und Loader-Options anstelle von /usr/lib/qt2 angeben. Die so eingestellten Optionen müssen Sie dann über den Menüeintrag Options-->Save Options sichern.
Kann mir vielleicht einer in seinen eigenen Worten sagen was man hier genau machen muss?
-
ich denke es wäre besser wenn du uns konkret sagst was du nicht verstehst, denn ich glaub kaum das dir das einer von deutsch in deutsch
übersetzt...