使用gcc时我们可以编写一个标准的c程序而不包含任何库,gcc如何使用没有库的函数,换句话说函数的原型和实体在哪里?
答案 0 :(得分:2)
GCC内置了许多标准选项。您可以在文件上调用gcc -v
时观察它们,也可以使用gcc -v <file> -Wl, --verbose
显式增加链接器的详细程度。
请注意,您可以将-nostdlib
,-nostdinc
选项传递给gcc以删除默认的C包含,并-nostdinc++
删除默认的C ++包含。
例如,当我使用-v
调用时,我可以在cygwin上看到以下代码段,
COLLECT_GCC_OPTIONS =' - v''-shared-libgcc''-minune = generic' '-march = X86-64' /usr/libexec/gcc/x86_64-pc-cygwin/4.8.2/collect2.exe -m i386pep --wrap _Znwm --wrap _Znam --wrap _ZdlPv --wrap _ZdaPv --wrap _ZnwmRKSt9nothrow_t --wrap _ZnamRKSt9nothrow_t --wrap _ZdlPvRKSt9nothrow_t --wrap _ZdaPvRKSt9nothrow_t -Bdynamic --dll-search-prefix = cyg --tsaware /usr/lib/gcc/x86_64-pc-cygwin/4.8.2/../../../../lib/ crt0.o中 /usr/lib/gcc/x86_64-pc-cygwin/4.8.2/crtbegin.o -L / usr / lib / gcc / x86_64-pc-cygwin / 4.8.2 -L / usr / lib / gcc / x86_64-pc-cygwin / 4.8.2 /../../../../ x86_64 -pc-cygwin的/ lib中/../ LIB -L / usr / lib / gcc / x86_64-pc-cygwin / 4.8.2 /../../../../ lib -L / lib /../ lib -L / usr / lib / .. / lib -L / usr / lib / gcc / x86_64-pc-cygwin / 4.8.2 /../../../../ x86_64-pc-cygwin / lib -L / usr / lib / gcc / x86_64 -pc-cygwin / 4.8.2 /../../ ../tmp/ccIyoOMf.o -lstdc ++ -lgcc_s -lgcc -lcygwin -ladvapi32 -lshell32 -luser32 -lkernel32 -lgcc_s -lgcc / usr / lib / gcc / x86_64的-PC-的cygwin / 4.8.2 / crtend.o
COLLECT_GCC_OPTIONS
变量将传递给GCC正在驱动的所有子流程,但特别是在此示例中,您可以看到它将默认链接到-lstdc++ -lgcc_s -lgcc -lcygwin -ladvapi32 -lshell32 -luser32 -lkernel32 -lgcc_s -lgcc
库。
答案 1 :(得分:0)
libc
,它包含所有标准输入和输出函数,例如stdio
/ stdlib
。
答案 2 :(得分:-1)
链接器有一些默认选项,除非明确更改,否则链接到某些核心C的东西。