0

main以外のグローバル関数をNASMから呼び出せない理由を教えてください。(質問する前に)はい、私はこれに関するすべての質問をスタックオーバーフローとインターネットで約8時間読みました。

C++コード。

void main();

extern "C" void nasm_function(void);

void c_function()
{
}

void main()
{
    nasm_function();

    system("pause");
}

NASMコード、

extern _c_function
extern _main

segment .text

global _nasm_function
_nasm_function:
call _main  
call _c_function

出力、

1>リンク中...1>my_asm.obj:エラーLNK2001:未解決の外部シンボル_c_function 1> F:\ Projects \ OSDev \ assmebly_test \ Debug \ project.exe:致命的なエラーLNK1120:1未解決の外部

ご覧のとおり、mainのリンクエラーは発生していません。どうしてか分かりません。:)

設定、

building nasm using custom-build-rules with nasm.exe -f win32 
Calling convention is __cdecl (/Gd)
Visual Studio 2008
NASM version 2.05
Didn't include my_asm.obj as a input to linker

誰でも何が問題なのか教えてください。前もって感謝します。(これはサンプルプログラムですが、それでも問題が発生することに注意してください)

4

1 に答える 1

1

問題は名前マングリングです。解決策はextern "C"です。

于 2012-08-05T13:32:58.347 に答える