【问题标题】:Inline function cross compilation issues for ARMv8 architecture using aarch64 linux android clang使用 aarch64 linux android clang 的 ARMv8 架构的内联函数交叉编译问题
【发布时间】:2017-04-21 16:15:51
【问题描述】:

我对在 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 函数定义放在头文件中,也不能将其作为静态内联,因为它必须从不同的编译单元调用。

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

【问题讨论】:

    标签: c gcc arm inline c99


    【解决方案1】:

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

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

    在有其声明的 file1.h 中,我将其更改为如下

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

    【讨论】:

      猜你喜欢
      • 2019-12-11
      • 2015-10-21
      • 2017-06-22
      • 2010-10-04
      • 2014-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-29
      相关资源
      最近更新 更多