Lowlevel

OffZone => Offtopic => Thema gestartet von: chr15 am 14. May 2004, 18:29

Titel: Elf .o mit g++ einlinken
Beitrag von: chr15 am 14. May 2004, 18:29
So ich hab folgendes Problem, dass ich möglichst schnell lösen muss. Wie übergebe ich dem g++ die Info, dass er eine bestimmte elf .o mitlinken soll???? Hab nähmlich einige Funktionen in Asm, nur ich weiß jetzt nicht, wie ich die einfach in eine C++-Programm bekomme.
Titel: Elf .o mit g++ einlinken
Beitrag von: Another Stupid Coder am 14. May 2004, 23:45
Also wenn du keine bestimmten Linker-Optionen brauchst einfach die *.o-Datei mit als argument übergeben:
g++ blabla.cpp lalala.o -o prog

Oder meinst du was anderes?
Titel: Elf .o mit g++ einlinken
Beitrag von: kleiner am 15. May 2004, 07:55
Zitat
chr15 postete
So ich hab folgendes Problem, dass ich möglichst schnell lösen muss. Wie übergebe ich dem g++ die Info, dass er eine bestimmte elf .o mitlinken soll???? Hab nähmlich einige Funktionen in Asm, nur ich weiß jetzt nicht, wie ich die einfach in eine C++-Programm bekomme.
Kann man von dem ELF.o darauf schließen, dass Du ELF umgesetzt hast?
Wenn ja, machst Du den Code OpenSource und stellst ihn irgendwo hin?
Titel: Elf .o mit g++ einlinken
Beitrag von: chr15 am 15. May 2004, 09:32
Werde ich in nen anderen Thread für Phier noch ganz veröffentlichen:
Ind C++ hab ich einen Prototypen:
int assembler_funktion( char * );

Und in Assembler heiß das dann (NASM):
global assembler_funktion

assembler_funktion:
....


Was muss ich daran ändern?
Das mit den einfach als Argument für g++ übergeben habe ich  auch schon gemacht, funktioniert aber nicht, da er den C++ prototyen nicht wiederfindet.
Titel: Elf .o mit g++ einlinken
Beitrag von: gurru am 15. May 2004, 23:13
hallo

In C++ gibt es functionname-encoding, um die mehrdeutigkeiten beim function´-overloading aufzulösen - deshalb muss die Funktion in nasm anders heißen.

1. Lösung: Du deklarierst die Funktion in C++ als:
Titel: Elf .o mit g++ einlinken
Beitrag von: gurru am 15. May 2004, 23:19
extern "C++" assembler_funktion(...)
Im Assembler muss man dann nur einen Unterstrich vor die Funktion schreiben

2. Lösung

Übersetzt die Datei mit g++ -S dateiname und seh im Assemblat nach, wie die Funktion heißen muss, damit der Linker diese findet

mfg

PS: bin auf den Absenden-Butto gekommen - editieren hat nicht funktioniert
Titel: Elf .o mit g++ einlinken
Beitrag von: chr15 am 16. May 2004, 15:34
Die 2. Lösung ist wirklich gut! Ein großes Lob an dich! Die erste Lösung hat das Problem, dass g++ bei Parametern und Rückgabewerten immer etwas dranhäng: Z.B. int hallo(char *) -> _Z17halloPc

Danke für die Hilfe!
Titel: Elf .o mit g++ einlinken
Beitrag von: gurru am 16. May 2004, 22:41
hallo

FEHLER:

Es müsste bei Lösung 1 auch
extern "C" assembler_function
heißen.

mfg