PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ld: zwei o-files in einem vereinen



SeCa
24-04-2003, 20:35
Hallo,
Ich hab volgendes Problem:

Ich hab zwei Dateien (./helloworld.c , ./bla.c). Im helloworld sind die Funktionen init_module und cleanup_module. Aus init_module moechte ich eine funktion von bla.c aufrufen. Wenn ich das aber so kompiliere:

gcc -Wall -DMODULE -D__KERNEL__ -DLINUX -c ./helloworld.c ./bla.c

bekomme ich zwei o-files, und ismod helloworld.o gib unresolved symbol aus (irgendwie ganz logisch).
Wie bekomme ich die beiden o-files zu einem zusammen?

Koennt ihr mir helfen waer euch sehr dankbar.

mfg SeCa

PS: das ganze sollte ein kernel modul geben

pik7
24-04-2003, 20:43
hallo,

gcc -o modul helloworld.o bla.o

gruß

SeCa
24-04-2003, 21:02
Das geht leider nicht. Er findet die main funktion nicht, da es ja kein Programm ist und die referenzen zu printk usw kann er nicht aufloesen.

pik7
24-04-2003, 21:19
hallo,

haste natürlich recht.
Habe zwar das Buch vom Rubini hier rumliegen aber da steht
das nicht drin.
Frage mich ob das überhaupt geht?
So weit ich das sehe (ohne jetzt mal genauer nachzuschauen)
sind Module alle "in einem Stück" geschrieben.

gruß

SeCa
24-04-2003, 21:27
hmmm ... bleibt mir wohl nicht anders uebrig als mich durch das 1619 zeilen lange man-file von ld durchzukaempfen. ;)

Ich danke dir fuer deine Hilfe.

Gruss SeCa

pik7
24-04-2003, 21:30
nochmal hallo,

vieleichts funktionierts ja mit ar
z.b

ar crv module datei1.o datei2.o

libs kan man so machen die haben
ja auch keine main() funktion.
Muss man halt mal ausprobieren

peschmae
25-04-2003, 07:46
aber die sind doch für statisches linken

aber ein Versuch ists wert ;-)

MfG Peschmä

SeCa
25-04-2003, 10:05
Mit ar gehts leider auch nicht.

Aber ich hab jetzt gesehn, dass ich das ganze mit der option -c kompiliere. Es wird kompiliert und assembliert (sagt man das so) aber nicht gelinkt. Ich denke, dass es dann live beim insmod gelinkt wird. Davor ist linken nicht möglich. :(

Ich werde bla.c jetzt einfach includen ... ein bisschen billig aber was solls.

Gruss SeCa