未定义的引用在C中调用汇编函数

时间:2012-10-17 12:21:29

标签: c assembly undefined-reference

我找不到解决这个问题的方法..

我要做的是使用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());
}

感谢您的帮助..

2 个答案:

答案 0 :(得分:4)

您是否知道许多C链接器自动在查找标识符时添加了前导下划线?所以在C源代码(汇编源代码)中,只需删除前导下划线:

extern void start_thread( pointer );

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

答案 1 :(得分:2)

使用“Asm Label”:

为您的函数[声明]装配链接
extern void start_thread(pointer) __asm__("start_thread");

(并让asm方面的.global与之匹配。)

它与extern "C"非常相似,因为它可以用于函数和变量,并且它是片面的(但这次是在C端)。