我想知道包含所有函数/定义的标准C库,如abs(),cout streams,printf等。
我熟悉头文件(stdio.h,cmath.h,time.h等),但似乎没有任何对应的.lib或.dll(即stdio.lib, time.dll等。)
这些头文件中函数的实际代码在哪里?我误会了什么吗?有没有,一个巨大的lib文件包含所有标准化的东西,或每个标题一个?
任何帮助表示赞赏!!
谢谢!
答案 0 :(得分:4)
这取决于实施。在Windows上,标准库功能位于the C and C++ runtime libraries。 C运行时库始终自动链接;如果包含一个标准库头文件,则会自动链接C ++运行时库。
答案 1 :(得分:3)
如果您使用的是Linux / AIX的某些变体,请尝试使用ldd。只是为了在Linux提示符中尝试 ldd`中的新类型ls` 的乐趣。这就是我得到的:
librt.so.1 => /lib/tls/librt.so.1 (0x0084c000)
libacl.so.1 => /lib/libacl.so.1 (0x40022000)
libselinux.so.1 => /lib/libselinux.so.1 (0x00289000)
libc.so.6 => /lib/tls/libc.so.6 (0x00a0b000)
libpthread.so.0 => /lib/tls/libpthread.so.0 (0x00c57000)
/lib/ld-linux.so.2 (0x009ec000)
libattr.so.1 => /lib/libattr.so.1 (0x40028000)
路径应该告诉您共享库的位置。 如果您使用的是Windows,请获取depends.exe http://www.dependencywalker.com - 优秀工具
答案 2 :(得分:2)
通常,您不必显式链接C或C ++运行时库。通常,编译器将使用正确的选项调用链接器为您执行此操作。
事实上,使用gcc,您必须做一些事情不包含默认库(例如使用-nodefaultlibs
,-nostdlib
或-nostartfiles
)。
标准库的实际位置,包括它是否在单个文件中,是一个实现问题。
答案 3 :(得分:1)
正如Arpan所提到的,您可以使用ldd(位于'binutils'包中)来发现实际用于libc的SO文件。 Linux系统上最常见的实现是GNU C library,通常称为glibc。
答案 4 :(得分:0)
如果你提到DLL,我假设你使用的是Windows。在这种情况下,编译器通常附带一个“运行时”DLL。使用Visual C ++,我相信名称是msvcrt.dll或类似的。