链接器错误内联函数

链接器错误内联函数,第1张

概述我有一些编译器/链接器错误,我不知道什么是正确的方法来继续.我遇到这种情况: > a.h:在此文件中定义了一个声明为“inline”的函数,例如:inline void foo1(); > b.h:在这个文件中定义了一个声明为“inline”的函数,它调用foo1():inline void foo2(); > main.c:foo1和foo2()都有一些函数调用. 现在,如果我在a.h和b.h中 我有一些编译器/链接器错误,我不知道什么是正确的方法来继续.我遇到这种情况:

> a.h:在此文件中定义了一个声明为“inline”的函数,例如:inline voID foo1();
> b.h:在这个文件中定义了一个声明为“inline”的函数,它调用foo1():inline voID foo2();
> main.c:foo1和foo2()都有一些函数调用.

现在,如果我在a.h和b.h中声明foo1和foo2作为extern inline voID我得到以下错误:

prj/src/b.o: In function foo1': (.text+0x0):
multiple deFinition of
foo1′
prj/src/main.o:(.text+0x0): first defined here make: *
[kernel] Error 1

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

解决方法 从 http://gcc.gnu.org/onlinedocs/gcc/Inline.html开始:

When an inline function is not static,then the compiler must assume
that there may be calls from other source files; since a global symbol
can be defined only once in any program,the function must not be
defined in the other source files,so the calls therein cannot be
integrated. Therefore,a non-static inline function is always compiled
on its own in the usual fashion.

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

总结

以上是内存溢出为你收集整理的链接器错误内联函数全部内容,希望文章能够帮你解决链接器错误内联函数所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1235753.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存