问题界面正在标记许多"Questions that may already have your answer",但我试图尽职尽责地检查是否有人问我到底在哪里 . 如果这是重复,我道歉 .
假设我有以下不正确的程序:
extern void undefined_function(void);
int main(int argc, char **argv)
{
undefined_function();
undeclared_function();
exit(0);
}
用gcc编译给出:
$ gcc warnings.c
warnings.c: In function ‘main’:
warnings.c:6:2: warning: incompatible implicit declaration of built-in function ‘exit’ [enabled by default]
/tmp/ccVzjkvX.o: In function `main':
warnings.c:(.text+0x15): undefined reference to `undefined_function'
warnings.c:(.text+0x1f): undefined reference to `undeclared_function'
collect2: ld returned 1 exit status
$
I know why these warnings are emitted, and how to correct them - that is not my question.
从输出中可以清楚地看出,gcc正在以不同的方式处理 exit() 与其他未定义/未声明的函数,因为它认为它是"built-in function"
对于给定的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: no symbols
$