我有一些编译器/链接器错误,我不知道什么是正确的方法来继续。 我遇到这种情况:
现在,如果我在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