提问界面标记了许多“可能已经有你答案的问题”,但我已尝试尽职调查以检查是否有任何人在问我在这里的确切内容。如果这是重复的,我很抱歉。
假设我有以下不正确的程序:
外部无效未定义函数(无效); int main(int argc, char **argv) { 未定义函数(); undeclared_function(); 退出(0); }
用 gcc 编译给出:
$ gcc 警告.c 警告.c:在函数'main'中: warnings.c:6:2:警告:内置函数“退出”的隐式声明不兼容 [默认启用] /tmp/ccVzjkvX.o:在函数“主”中: warnings.c:(.text+0x15): undefined reference to `undefined_function' warnings.c:(.text+0x1f): undefined reference to `undeclared_function' collect2: ld 返回 1 个退出状态 $
我知道为什么会发出这些警告,以及如何纠正它们——这不是我的问题。
从输出中可以清楚地看出,gccexit()
与其他未定义/未声明的函数的处理方式不同,因为它认为它是“内置函数”
对于给定的 gcc,我如何判断 gcc 认为是“内置函数”的函数列表是什么?它究竟是c标准库函数列表还是其他东西?
我考虑过这样做nm libc.so
,但在我的 Ubuntu VM 上,这个 glibc 似乎已被剥离,因此在这方面没有有用的信息:
$ nm /lib/x86_64-linux-gnu/libc.so.6 nm:/lib/x86_64-linux-gnu/libc.so.6:无符号 $