我找不到解决这个问题的方法..
我要做的是使用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());
}
感谢您的帮助..
答案 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端)。