0

この問題の解決策が見つかりません..

私がやろうとしているのは、gcc を使用してアセンブリ関数を呼び出すことです。ちょっと見てください:

// Somewhere in start.s
global _start_thread
_start_thread:
  ; ...


// Somewhere in UserThread.cpp
extern void _start_thread( pointer );

static void UserMainHack()
{
    _start_thread(((UserThread*)currentThread)->getUserMain());
}

助けてくれてありがとう..

4

2 に答える 2

4

多くのCリンカーは、識別子を探すときに先頭のアンダースコアを自動的に追加することをご存知ですか?したがって、Cソース(アセンブラーソースではない)では、先頭の下線を削除するだけです。

extern void start_thread( pointer );

static void UserMainHack()
{
    start_thread(((UserThread*)currentThread)->getUserMain());
}
于 2012-10-17T12:29:41.410 に答える
2

" Asm Label "を使用して、関数 [宣言] アセンブリ リンケージを指定します。

extern void start_thread(pointer) __asm__("start_thread");

(そして.global、asm 側を一致させます。)

extern "C"これは、関数と変数の両方に使用でき、一方的な (しかし今回は C 側で) という点でよく似ています。

于 2012-10-19T03:30:43.723 に答える