2016-03-24 20 views
1

私はVisual Studio 2013を使用していて、簡単なnasmコードを実行しようとしています。cppモジュールでアセンブラコードを使用しようとしたときにリンカエラーが発生しました

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(); 
} 

とASMファイルhello.asm:私は次のエラーを取得することの後に

SECTION .text 

EXTERN _printf 

global sayHello 
sayHello: 
    push ebx 
    call _printf 
    pop ebx 
ret 

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 

答えて

3

エラーメッセージを読むと、見つからない関数の名前が_sayHelloになります。先頭のアンダースコアに注意してください。

あなたが先頭にアンダースコアを使用してアセンブラ関数に名前を付ける必要があり、あなたの問題を解決するには、次の

global _sayHello 
_sayHello: 
    ... 
+0

が、私はまだ実行時にエラーが発生します。プログラムがクラッシュするだけです – Artyom

+0

'_printf'を呼び出すには' call __printf'を使う必要があります。または、元のコードに戻して 'nasm --prefix _'を使用してください – Jester

+0

'__printf'が未定義です – Artyom

関連する問題