标准库的函数库(例如:cout等)*新手问题* :)

3
我对包含所有函数/定义(如abs(),cout流,printf等)的标准C库感到好奇。
我熟悉头文件(stdio.h,cmath.h,time.h等等),但似乎没有任何相应的.lib或.dll文件(即stdio.lib,time.dll等)。
这些头文件中的函数实际代码在哪里?我是否有什么误解?是否有一个包含所有标准化内容的巨大lib文件或每个头文件都有一个?
谢谢!任何帮助都会受到赞赏!

5
C标准库中没有cout或流。 - James McNellis
5个回答

4
这取决于具体实现。在Windows上,标准库功能位于C和C++运行时库中。 C运行时库始终自动链接; 如果包含其中一个标准库头文件,则会自动链接C ++运行时库。

3
如果您使用的是Linux/某种UNIX/AIX系统,请尝试使用ldd命令。在Linux提示符下输入ldd `which 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
通常情况下,您不需要显式地链接C或C++运行时库。通常编译器会使用正确的选项调用链接器来为您完成此操作。
事实上,对于gcc而言,您需要做一些事情才能包含默认库(例如使用-nodefaultlibs-nostdlib-nostartfiles)。
标准库的实际位置,包括它是否在单个文件中,都是一个实现问题。

1
libgcc不是标准库,它是gcc用于长除法等实现内部代码。标准库通常称为libc。 - R.. GitHub STOP HELPING ICE

1
正如Arpan所提到的,您可以使用ldd(位于“binutils”软件包中)来发现libc实际使用的SO文件。 Linux系统上最常见的实现是GNU C库,通常称为glibc。

0
如果你提到 DLL,我会认为你在使用 Windows。在这种情况下,通常有一个“运行时”DLL随编译器一起发货。对于Visual C++,我相信名称类似于msvcrt.dll。

程序可能会使用多个 DLL,其名称为 msvcr**.dll、msvcp**.dll。例如:msvcr80.dll、msvcr90.dll 等。 - SigTerm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接