Интерфейс вопросов и ответов помечает многие «Вопросы, на которые, возможно, уже есть ваш ответ», но я попытался проявить должную осмотрительность, чтобы проверить, спрашивают ли они, что именно я здесь. Приношу свои извинения, если это дубликат.
Предположим, у меня есть следующая некорректная программа:
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 $
Я знаю, почему появляются эти предупреждения и как их исправить - это не мой вопрос.
Из выходных данных видно, что gcc обрабатывает exit()
иначе, чем другие неопределенные / необъявленные функции, потому что считает это «встроенной функцией».
Для данного gcc, как я могу определить список функций, которые gcc считает «встроенными функциями»? Это точно список стандартных библиотечных функций c или что-то еще?
Я подумал о том, чтобы сделать nm libc.so
, но на моей виртуальной машине Ubuntu этот glibc, похоже, удален, поэтому здесь нет полезной информации по этому поводу:
$ nm /lib/x86_64-linux-gnu/libc.so.6 nm: /lib/x86_64-linux-gnu/libc.so.6: no symbols $