Gcc 内联一个简单的汇编函数

Gcc 内联一个简单的汇编函数,gcc,assembly,x86,inline-assembly,inlining,Gcc,Assembly,X86,Inline Assembly,Inlining,我(试图)遵循,但我一定是做错了什么:函数没有内联(它仍然在反汇编中被调用)。以下是我所做的: get_regs.h: inline unsigned long\uu get\u esp(void){ \uuu asm\uuuu(“movl%esp,%eax”); } 程序c: … #包括“get_regs.h” … extern unsigned long\u get\u esp(void) … tmp=\uu get\u esp() 编译为(出于各种原因的其他选项): gcc-g-fno堆栈

我(试图)遵循,但我一定是做错了什么:函数没有内联(它仍然在反汇编中被调用)。以下是我所做的:

get_regs.h:
inline unsigned long\uu get\u esp(void){

\uuu asm\uuuu(“movl%esp,%eax”);

}

程序c:

#包括“get_regs.h”


extern unsigned long\u get\u esp(void)

tmp=\uu get\u esp()

编译为(出于各种原因的其他选项):
gcc-g-fno堆栈保护器-mpreferered stack boundary=2 program.c

这遵循第二条建议,将定义包含在头文件中

我意识到我可以使用扩展汇编并将结果从
%eax
复制到
tmp
,但我想了解如何进行内联。我找到了一些关于SO的线索,但似乎没有一个能覆盖我的案子

系统:
-Ubuntu 12.04
-通用条款4.6.3.

-x86 32位

您需要启用编译器优化(即使是最基本的级别),以便可能进行内联

顺便说一下,除非您对函数的非内联副本有任何特殊需要,否则您可以删除extern重新声明,只使用头文件中包含的内联声明