使用aarch64 linux android clang的ARMv8架构的内联函数交叉编译问题

时间:2017-04-21 16:15:52

标签: c gcc arm inline c99

我对在C代码中使用内联关键字有疑问(C99)。 我知道C99内联语义不同于C ++或gnuC内联规则, 我已经阅读了

http://www.greenend.org.uk/rjk/tech/inline.html

extern inline

但是,我无法让这个工作。

我在file1.c中有一个函数定义

inline myfunc(arguments)
{

}

此函数从file2.c中的另一个函数调用 在那个file2.c我尝试使用

extern inline myfunc(arguments);

从另一个函数

调用之前的这个函数

我仍然一直收到错误 - myfunc的隐式声明

如果我删除extern inline

,则

或未定义的引用错误

由于我的代码结构,不能在头文件中使用myfunc函数定义,也不能将其作为静态内联,因为它必须从不同的编译单元调用。

我错了什么?如何解决它。

1 个答案:

答案 0 :(得分:0)

经过大量的阅读,试验和错误我已经找到了上述问题的答案,我正在寻找 - 使用C99规则在C源文件中内联C函数定义,而不是将其放入头文件。 我将属性always_inline关键字添加到函数定义和声明中,如下所示并重新编译,它内联对该函数的调用。 在文件file1.c

__attribute__((always_inline)) void myfunc(arguments)
{
//... function definition
}

并在file1.h中有声明,我将其更改为

__attribute__((always_inline)) void myfunc(arguments);