Archiv verlassen und diese Seite im Standarddesign anzeigen : probs beim kompelieren / mit libraries
Hi,
will eine Librarie verwenden, binde die mit #include <grace_np.h> in mein C Programm ein.
Dabei kommt beim kompelieren immer folgender fehler-code:
joe@athlon:~/cscripts/projekte/xmgrace> gcc test.c -o test
/usr/bin/ld: /bin: is a directory
/usr/bin/ld: test.c: command not found
/usr/bin/ld: test.c: command not found
/usr/bin/ld: line 4: syntax error near unexpected token `(c'
/usr/bin/ld: line 4: ` * Copyright (c) 1997-1998 Henrik Seidel'
collect2: ld returned 2 exit status
Was muss ich denn machen um eine Librarie verwenden zu können (hab sie in mein /usr/include verzeichnis kopiert, und wenn ich mit option -lgrace_np.h starte kommt gleicher fehler!?
thx
anda_skoa
08-03-2003, 20:45
Ersten solltest du keine Header einfach in das System Header Verzeichnis kopieren, denn dafür sind -I Anweisungen da.
Zweitens sollte man nur Systemheader mit <> inkludieren, alle anderen mit ""
Die Linker Anweisung muss auch aus dem Pfad zur Bibliothek bestehen und als Bibliothek musst du den Namen der Bibliothek angeben, nicht die eines Headers.
Also
#> gcc -o test test.c -I/pfad/zu/den/headern -L/pfad/zur/lib -lname_der_lib
name_der_lib ist der Name der Libdatei, ohne das vorangestellte lib und ohne Dateiendung.
Ciao,
_
Original geschrieben von anda_skoa
#> gcc -o test test.c -I/pfad/zu/den/headern -L/pfad/zur/lib -lname_der_lib
Sorry das versteh ich nicht, ich habe eine Datei namens grace_np.h, die binde ich via include "grace_np.h" in meinem C Programm ein.
Und was meinst du mit pfad zu den headern und mit pfad zur lib bzw. mit dem namen?
Kann ich denn die lib einfach so verwenden ohne was configgen zu müssen bzw. was compelieren zu müssen?
Sorry bin was header/libs etc angeht absoluter dau (will das bei gelegeneit mal ändern!)
anda_skoa
08-03-2003, 23:02
Ein Header deklariert Funktionalität.
Ein Sourcefile implementiert diese Funktionalität.
Im Falle eine Lib ist die Implementation in der Lib Datei vorkompiliert.
Den Header braucht der Compiler, um zu wissen, welche Sachen es gibt.
Der Linker braucht dann die Lib, um zu wissen wie es funktioniert.
Beispiel:
Wenn du pow(double, double) verwenden willst, musst du in deinem Programm
#include <math.h>
schreiben, denn in diesem Header ist pow deklariert.
Wenn du das Programm dann erstellst, musst du als Linkeroption -lm angeben, damit er weiß, dass er mit libm.so linken muss. (-l ist ein kleiner L)
Bei Bibliotheken, derern Header nicht in /usr/include ist, muss man den Pfad zu der Header Datei mit einer -I Anweisung an den Compiler angeben. (-I ist ein großes i)
Wenn die Bibliothek nicht in /usr/lib ist, muss man ihren Pfad mit -L dem Linker mitteilen.
Ciao,
_
sorry aber es klappt immer noch nicht.
Ich geb folgendes ein:
gcc test.c -o test -l /home/joe/cscripts/projekte/xmgrace/grace_np.h
gcc: Compilation of header file requested
Soviel ich weiss ist grace_np.h die Headerdatei!?
Aber was ist nun die Bibliothek?
Und ich bin mir immer noch nicht sicher, ob das überhaupt so einfach geht, da ich nur eine Datei grace_np.h habe, und das kein Standard Funktion ist.
anda_skoa
09-03-2003, 10:40
-I nicht -l
(i nicht L)
#> gcc -o test test.c -I/home/joe/cscripts/projekte/xmgrace
Über den Namen der Lib kann ich nur spekulierern, kenn sie ja nicht.
Wahrscheinlich libxmgrace also müsste der komplette Aufruf wahrscheinlich so gehen:
#> gcc -o test test.c -I/home/joe/cscripts/projekte/xmgrace -L/home/joe/cscripts/projekte/xmgrace -lmgrace
Ciao,
_
arg!
geht immer noch nicht.
Hab aber eine Datei namens:
/usr/X11R6/lib/xmgrace/lib/libgrace_np.a
auf meinem System gefunden?
Hilft das was?
Bitte dann den vollständigen Aufruf posten.
thx
wenn ich es so versuch, gehts auch nicht:
joe@athlon:~/cscripts/projekte/xmgrace> gcc -o xmtest xmtest.c -I/home/joe/cscripts/projekte/xmgrace -L/usr/X11R6/lib/xmgrace/lib/libgrace_np.a -libgrace_np
/usr/i486-suse-linux/bin/ld: cannot find -libgrace_np
collect2: ld returned 1 exit status
anda_skoa
09-03-2003, 12:27
Wie ich schon sagte, bei -l wir der Name der Lin OHNE lib angegeben.
Das was du angegeben hast sucht nach einer Datei namens libibgrace_np
Deiner Pfadangabe zur Folge liegt die Lib in /usr/X11/lib/xmgrace/lib
Demnach dürften die Header in /usr/X11/lib/xmgrace/include liegen
Probier mal
#> gcc -o test test.c -I/usr/X11/lib/xmgrace/include -L/usr/X11/lib/xmgrace/lib -lxmgrace_np
Ciao,
_
joe@athlon:~/cscripts/projekte/xmgrace> gcc -o xmtest xmtest.c -I/usr/X11/lib/xmgrace/include -L/usr/X11/lib/xmgrace/lib -lxmgrace_np
/usr/i486-suse-linux/bin/ld: cannot find -lxmgrace_np
collect2: ld returned 1 exit status
hm?
anda_skoa
09-03-2003, 12:39
Mein Fehler.
Die Dtei heißt libgrace_np also -lgrace_np
Ciao,
_
thx. jetzt gehts ;)
xmgrace ist übrigens ein nettes plto programm mit dem man schöne graphen zeichnen kann.
mit einer fifo kann man sein eigenes c programm an den plotter anschliessen, echt schick.
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.