C++ in Assembler und umgekehrt
-
Hallo,
ich habe ein stückchen assembler code, der C++ Referenzen nutzen soll und in dem c++ code wird auch Assembler genutzt.
Sowohl den Assembler Code als auch den C++ Code habe ich compilet via:
nasm -f aout assembler.asm -o aseembler.o
gxx -c cpp.cpp -o cpp.oNun wollte ich beides zu einer Binär Datei linken, jedoch kann der Linker :
ld -o all.bin assembler.o cpp.o -e 0x0
die Referenzen nicht finden.
Hat jedmand eine Idee?
-
Fehlt im c++-Code vielleicht so was wie "extern void meine_asm_func(void)" und im Asm-Code ".globl meine_asm_func" (in gas-Syntax)?
-
Nein, das habe ich
-
und was sagt nm:
nm -a aseembler.o
oder
nm -a cpp.o
-
hm, was sollte denn da stehen?
-
Da sollten alle Symbole stehen, die in den Objektdateien enthalten sind, vielleicht stimmt da was nicht...
-
also bei Funktionen die exportiert werden, steht ein großes T davor, vor welchen die importiert werden sollen ein großes U ...
-
T steht für .text, glaube ich, das ist ok, U steht wahrscheinlich für undefiniert, aber da die Funktionen importiert werden sollen, ist das, denke ich auch ok.
Und wenn die Namen der U-Funktionen in einer Objektdatei mit den Namen der T-Funktionen in der anderen Objektdatei übereinstimmen, dann wäre das ok und ich gebe auf...
-
hm, ich glaube ich weiß warum es nicht klappt,
In der einen datei sind die funktionen mit unterstrich davor und in der anderen ohne. Also z.B.
T funktion
U _funktion
edit: jetzt habe ich nur noch eine referenz die fehlt, das wird hoffentlich noch
-
mhm, ich bekomme jetzt folgenden fehler:
undefined reference to '__gxx_personality_v0'
-
Vermutlich werden im c++-Code Funktionen aus irgendeiner Bibliothek verwendet...
Also wenn ja, dann muss man die Bibliothek beim Linken angeben, z.B. sold a.o b.o c.o -o mein_prog -lc -dynamic-linker /lib/benötigte_lib.so
Statt -dynamic-linker kann man auch -static verwenden, dann sind die Funktionen statisch verlinkt.
Vielleicht könnte es helfen, wenn du beim Kompilieren mit gcc noch den Schlüssel --verbose verwendest (damit macht gcc viele ausführliche Ausgaben), um zu sehen, welche Bibliotheken gcc verwendet, und diese später beim Linken angeben...