Danke, Tobias, so klappt die Parameteruebergabe wieder. Vielleicht noch ne kleine Frage. Braucht der Compiler keine Pfadangabe, wenn die Headerdatei im selben Verzeichnis steht, in dem man sich gerade befindet? Der sucht doch eigentlich in den vorgegebenen Dateien. Und warum geht bei: cc -I /home/.../header/ file1.c file2.c -o programm die Parameteruebergabe schief? Ist doch das selbe, ODER?
Danke, Torsten
Versuche mal: gcc -c file1.c gcc -c file2.c gcc file1.o file2.o -o programm
Ciao, Tobias
Am Tue, 29 Aug 2000 schrieb Torsten Lange: Hallo Torsten,
Danke, Tobias, so klappt die Parameteruebergabe wieder. Vielleicht noch ne kleine Frage. Braucht der Compiler keine Pfadangabe, wenn die Headerdatei im selben Verzeichnis steht, in dem man sich gerade befindet? Der sucht doch eigentlich in den vorgegebenen Dateien.
Siehe andere Mails
Und warum geht bei: cc -I /home/.../header/ file1.c file2.c -o programm die Parameteruebergabe schief? Ist doch das selbe, ODER?
Nicht die Parameterübergabe geht schief, sondern der Compiler kann nicht zwei .c-Dateien zu einem Programm verarbeiten und meckert deswegen rum... Die einzelnen Dateien müssen erst zu Objectdateien (.o) compiliert werden um anschließend vom Linker (ld wird automagisch von gcc gestartet) zu einem Programm gelinkt zu werden. Scheint zwar idiotisch, hilft bei großen Projekten aber beim Zeitsparen, da nur die Objectdatei der veränderten Datei erstellt werden muß und diese dann mit den breits compilierten anderen Objectdateien gelinkt werden kann.
Ciao, Tobias
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
On Tue, 29 Aug 2000, Tobias Koenig wrote:
Am Tue, 29 Aug 2000 schrieb Torsten Lange:
Und warum geht bei: cc -I /home/.../header/ file1.c file2.c -o programm die Parameteruebergabe schief? Ist doch das selbe, ODER?
Nicht die Parameterübergabe geht schief, sondern der Compiler kann nicht zwei .c-Dateien zu einem Programm verarbeiten und meckert deswegen rum... DDie einzelnen Dateien müssen erst zu Objectdateien (.o) compiliert werden um anschließend vom Linker (ld wird automagisch von gcc gestartet) zu einem
das Kommando an sich ist so voellig ok. Man kann sogar _mehrere_ .c und .o Dateien in so einem Aufruf mischen, cc ruft fuer die .c's erst mal cc1 und as auf und dann mit allen fertigen .o's den ld.
Konrad
- -- GPG-Key: http://lug-dd.schlittermann.de:11371/pks/lookup?op=get&search=0x0F4648C4 FingerPrint: B333 F8FB 644A D695 F494 7068 9BAA 4EEC 0F46 48C4
On Tue, Aug 29, 2000 at 02:19:31AM +0200, Tobias Koenig wrote:
Am Tue, 29 Aug 2000 schrieb Torsten Lange:
Und warum geht bei: cc -I /home/.../header/ file1.c file2.c -o programm die Parameteruebergabe schief? Ist doch das selbe, ODER?
Nicht die Parameterübergabe geht schief, sondern der Compiler kann nicht zwei .c-Dateien zu einem Programm verarbeiten und meckert deswegen rum...
Eben _das_ hat er ja nicht -- gemeckert.
Best regards from Dresden/Germany Viele Gruesse aus Dresden Heiko Schlittermann
Torsten Lange wrote:
Danke, Tobias, so klappt die Parameteruebergabe wieder. Vielleicht noch ne kleine Frage. Braucht der Compiler keine Pfadangabe, wenn die Headerdatei im selben Verzeichnis steht, in dem man sich gerade befindet? Der sucht
Also noch mal zum Thema Header (ich muß es ja wissen :-) Du bindest Header mittels <myheader.h> oder "myheader.h" ein. Im ersten Fall werden die Includeverzeichnisse durchsucht, im zweiten nur das aktuelle Verzeichnis. Über den Schalter -I beim gcc fügst du den Includeverzeichnissen weitere Einträge hinzu (das beeinflußtm _nicht_ headr, die mit "" eingebunden sind). Unterverzeichnisse lassen sich auch direkt einbinden, z.B. sucht <linux/aheader.h> nach aheader.h im Unterverzeichnis linux in allen Includeverzeichnissen. Wenn du für ""-Header weitere Verzeichnisse einbinden willst, schau dir mal man gcc an (das geht auch irgendwie).
doch eigentlich in den vorgegebenen Dateien. Und warum geht bei: cc -I /home/.../header/ file1.c file2.c -o programm die Parameteruebergabe schief? Ist doch das selbe, ODER?
Hmm, ich bin mit der Theorie nicht soooo vertraut, aber das selbe ist das auf jeden Fall nicht. Der "Berührungspunkt" ist das Header-File und nicht das direkte Einbinden per include "file2.c", so daß der Compiler das irgendwie auseinanderfitzen muß beim linken (daß beide dasselbe Header-File einbinden). Ich bekomme grad mit, daß ich hier an meine Grenzen stoße, also lass ich es mal mit weiteren Erklärungen sein ;-).
Noch ein Tip: Wenn du so etwas häufig machst (mit Header-Files und so), schau dir erstmal "man make" und "man Makefile" an, da muß man nicht so viel tippen ;-).
Danke, Torsten
ulf
On Tue, Aug 29, 2000 at 10:00:51AM +0200, Ulf Lorenz wrote:
doch eigentlich in den vorgegebenen Dateien. Und warum geht bei: cc -I /home/.../header/ file1.c file2.c -o programm die Parameteruebergabe schief? Ist doch das selbe, ODER?
Hmm, ich bin mit der Theorie nicht soooo vertraut, aber das selbe ist das auf jeden Fall nicht. Der "Berührungspunkt" ist das Header-File und nicht das direkte Einbinden per include "file2.c", so daß der Compiler das irgendwie auseinanderfitzen muß beim linken (daß beide dasselbe Header-File einbinden).
Obiges macht, wie man sich per gcc -v anschauen kann, folgendes:
cpp file1.c /tmp/tmp1 cc1 /tmp/1 /tmp/2 as /tmp/2 /tmp/3 cpp file2.c /tmp/4 cc1 /tmp/4 /tmp/5 as /tmp/5 /tmp/6 ld /tmp/3 /tmp/6 -o program
Abgesehen davon, dass damit die Objectfiles nur kurz im /tmp landen ist das analog zu "gcc -c file1.c; gcc -c file2.c; gcc file1.o file2.o -o program" Da gibt es also keine anderen "Berührungspunkt" und beide varianten sollten den gleichen Kode fressen.
Reinhard
On Tue, Aug 29, 2000 at 10:00:51AM +0200, Ulf Lorenz wrote:
Noch ein Tip: Wenn du so etwas häufig machst (mit Header-Files und so), schau dir erstmal "man make" und "man Makefile" an, da muß man nicht so viel tippen ;-).
info make
...
Heiko
lug-dd@mailman.schlittermann.de