libstdc++;。那么提供什么呢? 几乎所有真正的可执行C++程序都链接到LIbSTDC++ ++。这个共享库提供什么样的功能

libstdc++;。那么提供什么呢? 几乎所有真正的可执行C++程序都链接到LIbSTDC++ ++。这个共享库提供什么样的功能,c++,C++,我认为很多工作都是在编译时完成的,比如模板实例化,这在编译之前是无法完成的。如果您真的想在库中明确定义函数列表,可以在库文件上使用nm命令: nm-D-C-g——仅定义/usr/lib/gcc/x86_64-linux-gnu/4.6/libstdc++.so | less 如果将是巨大的,详尽的。。。但是它显示了导出的内容。LBSTDC++为用户空间C++应用程序提供运行时支持。该库中的内容是特定于实现的,可能会从一个版本更改为下一个版本。你可能不应该依赖那里的东西 抛开理论不谈,共享库总是导

我认为很多工作都是在编译时完成的,比如模板实例化,这在编译之前是无法完成的。

如果您真的想在库中明确定义函数列表,可以在库文件上使用
nm
命令:

nm-D-C-g——仅定义/usr/lib/gcc/x86_64-linux-gnu/4.6/libstdc++.so | less


如果将是巨大的,详尽的。。。但是它显示了导出的内容。

LBSTDC++为用户空间C++应用程序提供运行时支持。该库中的内容是特定于实现的,可能会从一个版本更改为下一个版本。你可能不应该依赖那里的东西

抛开理论不谈,共享库总是导出函数和/或数据等符号。有许多工具可用于查看这些符号。其中之一是,;如果指定
-D
参数,它将显示动态符号。让我们在libstdc++上实现它。(这个列表相当大,所以我使用了
head-20
来限制它。)

这只是C++运行时提供的一些函数。在上述情况下,大多数是实施的。
还注意到C++名称可能被损坏,例如,你可以遇到一些类似于St99HasFasTest7CdVoTWC1111BMSTATEY-TEEBRKST6语言的东西。你可能很难要求自己去理解它的意思。因此,有另一个名为的工具可以帮助实现这一点,例如将其称为

c++filt\u ZSt9has\u faceist7codecvtiwc11\u mbstate\u tEEbRKSt6locale

您甚至可以使用它来对任何出现损坏的符号进行demangle处理,如在
nm-D/lib64/libstdc++.so.6 | c++filt


当然,这将与任何共享对象一起工作,而不仅仅是C++运行时。< /P>它提供了所有不是模板和内联的函数。@ MatsPetersson LIB如何?可能还有一些模板显式的专门化和显式实例化。此外,有时一个公共模板函数会调用一个私有的非模板函数来完成它的一些工作,这些非模板函数会在可链接的库中。除了标准函数之外,我相信它还包含很多特定于C++的运行时内容(异常处理等)。以及运行时类型信息,还有很多。只有标记为
T
的符号实际上是由
libstdc++提供的。因此
,其余的都在别处提供。@rubenvb:不一定,但你仍然有一个很好的观点
T
表示“符号位于文本(代码)部分”。例如,
V
将是弱符号,也提供了弱符号,但如果在其他地方提供,则会被覆盖。这些缩写词的列表是nm手册页面“描述”部分的第一项内容。对,我通常看到Windows的东西,所以对我来说只有
U
T
$ nm -D /lib64/libstdc++.so.6 | head -20
                 U abort
                 U __assert_fail
000000386565d2b0 T atomic_flag_clear_explicit
000000386565d2f0 T __atomic_flag_for_address
000000386565d2a0 T atomic_flag_test_and_set_explicit
000000386565d2c0 T __atomic_flag_wait_explicit
                 U bindtextdomain
                 U btowc
                 U __ctype_get_mb_cur_max
000000386565dd10 T __cxa_allocate_dependent_exception
000000386565dae0 T __cxa_allocate_exception
                 U __cxa_atexit
000000386565df10 T __cxa_bad_cast
000000386565df50 T __cxa_bad_typeid
000000386565dfe0 T __cxa_begin_catch
000000386565eb10 T __cxa_call_unexpected
000000386565f160 T __cxa_current_exception_type
000000386565fa00 T __cxa_deleted_virtual
0000003865668990 T __cxa_demangle
000000386565e050 T __cxa_end_catch