初学者在Linux下写C/C++程序,往往不清楚#include一个头文件是从哪里包含进来的,这些头文件的实现又是在哪里。另外,其中那些部分是C的运行时库提供的。因此,本文解决以下问题:
1. Linux C/C++程序头文件在哪里
2. Linux C/C++源程序在哪里
3. glibc
4. 动态链接库和静态链接库
************************************************************************************************************************************
1. Linux C/C++程序头文件在哪里
大部分在/usr/include/下
一部分在/usr/lib/**下
2. Linux C/C++源程序在哪里
有些在Linux内核中(如系统调用)
有些在glibc中(如C标准库),glibc只有库没有源码,库在/usr/lib/libc.so和/usr/lib/libc.a
有些在第三方库中(/lib和/usr/lib中)
3. glibc
glibc, The GNU C Library, 是gnu发布的libc库,即c运行库。glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc。glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现。由于 glibc 囊括了几乎所有的 UNIX 通行的标准,可以想见其内容包罗万有。而就像其他的 UNIX 系统一样,其内含的库文件分散于系统的树状目录结构中,撑起整个操作系统。
4. 动态链接库和静态链接库
为何include了一个头文件,就可以使用其中声明的东西,系统是在哪里找到这些东西的实现的。有必要了解下“动态链接库”和“静态链接库”的原理、制作过程以及他们生成的文件。详见我另外的博客。
注意:在使用动态链接库时(使用静态链接库亦然),
在写C/C++程序时,保证能include到/usr/include或/usr/lib/*下的.h文件;
在运行C/C++程序时,保证能链接到glibc提供的动态链接库文件/usr/lib/libc.so
综上,使用系统或者第三方提供的函数库时,
一定要有函数的声明,在.h文件中
一定要有函数的实现,在.c或.so或.a中(三者有其一即可)
参考文档:
http://blog.csdn.net/ysdaniel/article/details/7043381
glibc百度百科 http://baike.baidu.com/link?url=bkQ8yk_HsvMtDpIR60rAM0AweMDOO-ZkhokzyHr3DYtQ6UutgGjtkqn2quyuULVhg3cH8EmJujKRGR1KK1icFq
相关推荐
在Linux环境下,使用QT进行开发时,我们常常需要创建头文件(.h)和源文件(.cpp),以便实现特定的功能。为了提高开发效率,我们可以编写自动化脚本来完成这个过程。这里的"linux QT 自动生成.h和.cpp文件的编译...
在Linux系统中,`getopt.h` 和 `getopt.cpp` 是两个与命令行参数处理相关的文件。`getopt` 是一个广泛使用的函数,用于解析命令行选项和参数,它在许多C和C++程序中都有应用。让我们深入探讨一下这两个文件以及它们...
* **cellitem.h** 和 **cellitem.cpp** 类文件:每个格子元素item,包含状态等 * **configdialog.h** 和 **configdialog.cpp** 类文件:游戏配置操作 * **fielddata.h** 和 **fielddata.cpp** 类文件:底层数据 * **...
在本主题中,我们将探讨`regex.h`头文件和`regex.cpp`源文件,以及如何在Visual Studio 2010或2012环境下编译它们。 首先,`regex.h`是包含POSIX正则表达式函数声明的头文件。在Linux中,这个头文件定义了几个关键...
*.cpp;*.h;*.hpp) 2、Fortran (*.for) 3、Java (*.java) 4、Pascal (*.pas;*.dpr;*.dpk) 5、Visual Basic (*.bas) 6、x86 Assembly (*.ASM) 7、Javascript (*.js) 8、VBScript (*.vbs) 9、PHP (*....
在本案例中,"regex.h" 和 "regex.cpp" 是两个关键文件,它们分别代表了C语言中处理正则表达式的头文件和源文件。 `regex.h` 头文件是C语言中使用正则表达式的关键接口,它包含了所有与正则表达式相关的函数声明和...
stdafx.h 头文件 很多时候c运行 提示找不到stdafx.h ,
最后,文档中出现了一些OCR扫描错误和缺失,例如`Linux***-11-**.*.*.*.*.*.*.*.*.*.*.*.3.4.mswitchmayornwhilea=ya=nscvVrarrha=ya=nproject.cpp`等部分,这些内容在逻辑上看似无关联,可能是扫描时的误读。...
Linux 操作系统下常见文件类型可以分为多种,包括压缩和打包文件、普通文件格式、系统文件、程序和脚本文件等。 压缩和打包文件是指使用某种压缩算法或打包工具将多个文件或文件夹压缩或打包到一个文件中的文件。...
"QT-main.cpp-widget.h\.cpp"这个项目包含的是一个基础的QT应用示例,它将引导我们了解如何搭建QT开发环境,编写代码,以及最终生成一个带有窗口和按钮的应用。 首先,我们需要安装QT开发工具。在Linux系统中,这...
`SerialPort.h` 和 `SerialPort.cpp` 是两个关键的源代码文件,通常用于实现C++编程语言中的串行通信功能。下面将详细讨论这两个文件及其在串行通信中的作用。 `SerialPort.h` 是一个头文件,它包含了类声明(class...
在IT行业中,ELF(Executable and Linkable Format)文件格式是一种广泛用于Linux和其他类UNIX系统的可执行文件和共享库的标准格式。Readelf工具是Linux下的一个实用程序,它能够显示ELF文件的各种元数据,包括节区...
二、Windows、Linux双平台线程池的实现. 三、一些标准编码的封装类实现. _base64Encode.h _urlEncode.h _utf8Encode.h base32Encode.cpp base32Encode.h base64Encode.cpp base64Encode.h crc32Encode.cpp crc32...
Aspose.Words是一款强大的文档处理库,主要用于在C++编程环境中创建、操作和转换Microsoft Word文档。这个"Aspose.Words.Cpp_18.11.zip"压缩包包含的资源显然是Aspose.Words库的C++版本,版本号为18.11,允许开发者...
在IT行业中,串口通信是一种基础且重要的通信方式,尤其在嵌入式系统、工业控制等领域广泛应用。...通过深入研究"CSerialPort.h"和"CSerialPort.cpp",开发者可以进一步提升自己在串口通信领域的技能。
本资源包含了两个关键文件——`CSerialPort.h`和`CSerialPort.cpp`,它们是实现串口通信功能的C++类库,通常用于编写与硬件设备进行数据交互的应用程序。 `CSerialPort.h`是头文件,它定义了`CSerialPort`类的结构...
在本主题中,我们关注的是如何在C++项目中使用FFmpeg的头文件(`.h`)和库,特别针对ARM和x86架构。以下是对这些知识点的详细解释: 1. **FFmpeg API**: FFmpeg 提供了一组丰富的API,供开发者使用C或C++编写应用...
在Linux编程环境中,`Makefile`是一个至关重要的工具,它帮助开发者自动化编译、链接以及执行过程,使得项目管理更加高效。本实验报告主要探讨了`Makefile`的基础使用,通过两个具体的作业实例来阐述其编写规则和...
Web 应用程序为 EECS 183(密歇根大学的计算机科学课程)对学生的 .cpp 和 .h 文件进行评分。 ##设置 Web 开发 下载 pip 包管理器。 下载虚拟环境: pip 安装 virtualenv 激活虚拟环境 虚拟环境 在 Windows 中...