Lowlevel
OffZone => Offtopic => Thema gestartet 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.
-
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?
-
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?
-
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.
-
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:
-
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
-
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!
-
hallo
FEHLER:
Es müsste bei Lösung 1 auch
extern "C" assembler_function
heißen.
mfg