标准库-c++中的核心头文件
standard library - Core header files in c++
当我们想使用标准c++库中的函数时,我们会插入一个coressconding头文件。但头文件只是包含函数声明。这个功能是从什么实现中出现的?考虑以下简单程序:
#include <stdio.h> //Here is only declaration of functions, not implementation.
int main(){
printf("Hello world");
}
这个功能在哪里实现?我没有指定要编译和链接其他.cpp
文件。
编译后的代码驻留在库中。这些库的确切位置和名称取决于平台和编译器。例如,在各种Unixen GCC上,标准C++库有两个版本:"/usr/lib/libstdc++.so.{version}"answers"/usr/lib-libstdc++.a"。在旧版本的OS X上,您会发现"/usr/lib/libstdc++.{version}.dylib"answers"/usr/lib/libstdc++-static.a";较新版本使用libc++:"/usr/lib/libc++.{version}.dylib"。动态库不是作为Windows的一部分安装的(尽管它们被许多应用程序使用,但它们存在于许多计算机上),需要与应用程序一起打包和分发。
在编译代码(将C++代码转换为对象代码)之后,将出现链接,代码中的外部符号将解析为库中的符号。默认情况下,某些库(如libstdc++)通过链接器链接到您的目标代码。其他库可以添加到链接过程中。例如,如果您使用Boost.Thread,您会将Boost_Thread-mt、Boost_tthread-vc80-mt或任何本地名称添加到要链接的库列表中。
库的两个不同版本的原因是,一个提供静态链接,将库的目标代码复制到链接的代码中;另一个提供动态链接,将代码中的符号引用库文件,但不复制任何目标代码。后者的优点是文件大小较小(因为代码保存在一个库中,而不是在使用它的每个二进制文件中重复)。动态库的主要问题是依赖性地狱,两个不同的软件包需要不同的、不兼容的库版本。当陷入依赖地狱时,至少有一个库将是至少一个软件包的错误版本,因此无法工作。对库文件名进行版本控制有助于防止这种情况,因为多个库版本可以并行存在,并且软件二进制文件可以链接到适当的版本。
- C++代码生成核心文件,就像 gdb >> gcore 一样
- Linux:有没有办法找出生成核心文件的过程
- 在远程嵌入式设备上使用核心文件的 GDB - 如何获取有关回溯的更多信息?
- 为什么我的 Redhat 服务器上的 QuickFIX 进程没有将其核心文件写入应有的位置?
- 如何计算预期的核心文件大小
- 堆栈内存错误创建核心文件
- 我如何利用核心文件在C/C 中找到应用程序问题
- 将大型核心文件转换为"minicore"文件
- 没有在gdb中加载带有breakpad核心文件的符号
- 如何避免编写核心文件并加快回溯生成
- 教 gdb 理解核心文件中的微线程
- GDB 核心文件丢失
- 如何多次更改核心文件大小限制
- 是否可以从 ELF 核心文件中删除堆
- 正在查找使用核心文件消耗的内存
- 可以将核心文件恢复到正在运行的程序中
- ulimit对核心文件大小不起作用?
- gdb 7.0警告:核心文件中的fpregset大小错误
- 如何使用 gdb 从核心文件中获取 lua 堆栈跟踪
- 从核心文件中获得完全意外的错误