【发布时间】:2016-05-12 19:07:53
【问题描述】:
编程语言:C
在我们的工作中,我们有一个项目,它有一个头文件,比如 header1.h 。该文件包含一些被声明为外部作用域的函数(通过 extern),并且在同一个头文件(header1.h)中也被定义为内联。
现在这个文件包含在不同 C 文件的多个位置。 我的理解是,根据我过去的 GCC 经验,它会产生多个定义的错误,这就是我所期望的。但在我们的工作中,我们没有遇到这些错误。唯一不同的是我们使用了不同的编译驱动。
根据我过去的经验,我的最佳猜测是,符号在编译时生成为弱符号,链接器正在使用该信息来选择其中一个。
定义为内联的函数会导致弱符号吗?有没有可能,还是有其他原因。
如果内联会导致创建弱符号,是否有一个功能可以关闭或打开它。
【问题讨论】:
-
不,弱符号是 GNU 扩展,甚至没有在标准 AFAIK 中定义。
inline函数具有特殊语义,您可以在 Stack Overflow 上的某个地方查找。 -
@Downvoter 弱符号是ELF standard 的一部分:弱符号表示链接可执行和可链接格式 (ELF) 目标文件期间的特殊注释符号。 ...
-
@AndrewHenle 当然,我的意思是 C 标准,我忘记写了。作为 ELF 标准的一部分,它不是特定于 GNU 的扩展,而是使其成为实现定义的,独立于标准。
标签: c gcc compiler-errors