2010-11-23 2 views
0

Verfasst am: 22. November 2010 02.30 Uhr Betreff des Beitrags: Wie eine Assembly-Objekt mit einem C++ Projekt
Hallo, verbindenLink-Windows-OBJ-Datei mit C++ Projekt mit NetBeans/GCC/NASM

I versuche, ein Assembly-Programm mit meinem C++ - Programm zu verknüpfen. Ich verwende NASM, um die .obj-Datei mit dem Befehl "nasm -fobj myprogram.asm" zu generieren. Die .obj-Datei wird erstellt, aber ich bin mir nicht sicher, wie ich diese mit meinem Projekt verknüpfen soll. Ich habe versucht, die Datei Linker-> Abhängigkeiten hinzufügen, aber ich bekomme immer noch den Fehler, dass meine externe Assembly-Funktion nicht definiert ist. Möglicherweise befindet sich die OBJ-Datei in dem falschen Verzeichnis (es befindet sich in dem Stammprojektordner zusammen mit den CPP-Dateien)?

Kann jemand eine einfache Erklärung geben, wie man eine OBJ-Datei für die Assemblersprache mit meinem Projekt verknüpft?

Danke, -KB

Antwort

0

Achten Sie darauf, den Namen in geeigneter Weise in der Assembler-Code mangle. IIRC, __stdcall wird standardmäßig in 32-Bit-MSVC verwendet und es fügt einen Unterstrich voran und fügt @ [Bytes der Argumente] hinzu. So, size_t strlen(const char *str), wenn kompiliert würde __stdcall zu [email protected] gemangled werden.

Look here oder here für weitere Details.

+0

Die einzige Information, die ich über NASM/GCC gefunden habe, gibt an, dass ich einen Unterstrich (_) dem Funktionsnamen in der ASM-Datei voranstellen muss. Aber das hilft nicht. Ich habe das Gefühl, dass ich NetBeans nicht sage, wie man die Datei richtig verknüpft, aber ich bin ziemlich neu, also bin ich mir nicht ganz sicher. Ich folgte den Anweisungen in einem NetBeans Forum Post, dass das Hinzufügen der myprojgram.obj Datei zu den Linker-Abhängigkeiten wird die Datei verknüpfen ... – enoculus

+0

@enoculous Verwenden Sie objdump (oder was auch immer Ihre Plattform verwendet, um Obj-Dateien zu sehen) und sehen, was die Namen sind in den objs und posten sie hier ebenso wie irgendwelche Calling Convention Compiler-Schalter, Zeug in den Code usw. eingebettet und ich werde sehen, ob ich es herausfinden kann. – JimR