c/c++语言开发共享链接器错误内联函数

我有一些编译器/链接器错误,我不知道什么是正确的方法来继续。 我遇到这种情况:

现在,如果我在ah和bh中声明foo1和foo2作为extern inline void我得到以下错误:

prj / src / bo:在函数foo1': (.text+0x0): multiple definition of :(。text + 0x0):foo1’prj / src / main.o :(。text + 0x0)的foo1': (.text+0x0): multiple definition of :这里首先定义make: * [kernel]错误1

在我描述的情况下,允许编译和链接而没有错误/警告的方式是什么?

    来自https://gcc.gnu.org/onlinedocs/gcc/Inline.html :

    当内联函数不是静态函数时,编译器必须假定可能存在来自其他源文件的调用; 由于全局符号只能在任何程序中定义一次,因此不能在其他源文件中定义该函数,因此无法集成其中的调用。 因此,非静态内联函数总是以通常的方式自行编译。

    换句话说,如果没有static ,它会为您的内联函数发出一个符号。 如果您碰巧在标头中定义了该函数并将其包含在多个编译单元中,那么您最终会得到多个(重新定义的)符号。 如果要在标题中包含定义,则应将其设置为static

    我试了一下,没有得到任何错误

     extern inline void foo1() { return; } 

    BH

     extern inline void foo2() { foo1(); return; } 

    main.cpp中

     #include "ah" #include "bh" int main() { foo1(); foo2(); return 0; } 

    inline定义放在.h文件和.c文件中强制外部定义。

    例如:

     // File: ah inline void foo1(void) { /*...*/ } // File main.c #include "ah" extern inline void foo1(void); int main(void) { /*...*/ } 

      以上就是c/c++开发分享链接器错误内联函数相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/517871.html

      (0)
      上一篇 2020年12月9日
      下一篇 2020年12月9日

      精彩推荐