2016-03-24 4 views
1

zu verwenden Ich benutze Visual Studio 2013 und versuche, einfache Nasm-Code auszuführen.Linker-Fehler beim Versuch, Assembler-Code in cpp Modul

main.cpp:

#include "Header.h" 
void _printf() { 
    printf("HELLO\n"); 
} 

int main() 
{ 
    sayHello(); 
    return 0; 
} 

header.h:

#include <stdio.h> 

void _printf(); 

extern "C" { 
    void sayHello(); 
} 

und asm-Datei hello.asm:

SECTION .text 

EXTERN _printf 

global sayHello 
sayHello: 
    push ebx 
    call _printf 
    pop ebx 
ret 

nach, dass ich die folgende Fehlermeldung erhalten:

Error 1 error LNK2019: unresolved external symbol _sayHello referenced in function _main c:\Users\art.mhtr\documents\visual studio 2013\Projects\ConsoleApplication8\ConsoleApplication8\main.obj ConsoleApplication8 

Antwort

3

Wenn Sie die Fehlermeldung lesen, sehen Sie, dass die Funktion, die sie nicht finden kann, _sayHello heißt. Beachten Sie den führenden Unterstrich.

Ihr Problem zu lösen, müssen Sie Ihre Assembler-Funktion mit einem Unterstrich nennen:

global _sayHello 
_sayHello: 
    ... 
+0

ich einen Fehler nach wie vor in einer Laufzeit erhalten. Programm stürzt einfach ab – Artyom

+0

Um Ihr '_printf' aufzurufen, müssen Sie' call __printf' verwenden. Oder gehen Sie zurück zum ursprünglichen Code und verwenden Sie 'nasm --prefix _' – Jester

+0

Es sagt, dass '__printf' undefined ist – Artyom