Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : probs beim kompelieren / mit libraries



mithras
08-03-2003, 20:11
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,
_

mithras
08-03-2003, 22:47
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,
_

mithras
09-03-2003, 08:40
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,
_

mithras
09-03-2003, 10:52
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,
_

mithras
09-03-2003, 12:31
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,
_

mithras
09-03-2003, 12:53
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.