我的编程空间,编程开发者的网络收藏夹
学习永远不晚

在linux中库与头文件的联系是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

在linux中库与头文件的联系是什么

本篇内容介绍了“在linux中库与头文件的联系是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

在linux中库与头文件的联系:头文件中有函数的申明,库文件实现函数的定义;库中的每个函数都需要在头文件中加以声明。在写程序时,需要用头文件来提供对常量的定义和对系统函数及库函数调用的声明;而库是一组已经编译好的函数的集合,也就是目标文件“.o”的集合,是按照可重用的原则编写的,一般由一组互关联的函数组成以执行某项常见任务。

在一般应用程序源代码中,头文件中有函数的申明,库文件实现函数的定义;库中的每个函数都需要在头文件中加以声明。

1. 头文件

在写程序时,我们需要用头文件来提供对常量的定义和对系统函数及库函数调用的声明,这些头文件位于/usr/include中。这些头文件都位于可以被编译器自动搜索到的目录中,如X视窗系统的/usr/include/X11和GNU C++的/usr/include /c++。

在调用gcc时,可以使用标志-I来包含保存在子目录或其它非标准位置中的头文件,例如 gcc -I/usr/openwin/include fred.c

2. 库文件

库是一组已经编译好的函数的集合,也就是目标文件.o的集合,是按照可重用的原则编写的,一般由一组互关联的函数组成以执行某项常见任务。

标准linux系统库文件一般存储在/lib/usr/lib目录中。默认情况下GCC的链接程序只搜索标准C语言库,这是一个历史遗留问题。我们必须使库文件名遵守特定的规范并在命令行中加以指定。

库文件总以lib开头,然后指出这是什么库,最后的部分.a代表静态函数库,.so代表共享函数库(即windows下的DLL动态链接库)。

gcc -o fred fred.c /usr/lib/libm.agcc -o fred fred.c -lm
-L标志为链接器增加库的搜索路径,如gcc -o x11fred -L /usr/openwin/lib x11fred.c -1X11

2.1 静态库

静态库以.a结尾,也称作归档文件,在生成可执行程序时,静态库文件就被链接进去,生成的可执行文件较大,可以脱离静态库文件运行。

2.1.1 生成方法

首先创建两个源文件fred.c和bill.c

在linux中库与头文件的联系是什么

在linux中库与头文件的联系是什么

然后用gcc -c编译生成两个目标文件

在linux中库与头文件的联系是什么

然后为这两个函数编写头文件,进行函数声明

在linux中库与头文件的联系是什么

然后在main函数中包含头文件并调用其中一个库函数

在linux中库与头文件的联系是什么

然后编译main函数并将main.o和之前生成的bill.o链接,可以正确执行

在linux中库与头文件的联系是什么

接下来我们生成库文件,用ar归档程序创建归档文件并将目标文件添加进去,它可将若干单独的文件归并到一个大的文件中。ar crv libfoo.a bill.o fred.o 之后我们要用ranlib命令为函数库生成一个内容表。

在linux中库与头文件的联系是什么

然后我们将库文件和之前生成的program.o文件链接起来,执行成功

在linux中库与头文件的联系是什么

也可以用-l指定函数库,并用-L指定非标准位置。

在linux中库与头文件的联系是什么

我们可以用nm命令查看哪些函数被包含在目标文件,函数库或可执行文件中,可用于反汇编分析。程序被创建时它只包含函数库中它所实际需要的函数,虽然头文件中有所有函数的声明,但链接器并不会将它们全部链接进去。

在linux中库与头文件的联系是什么

在linux中库与头文件的联系是什么

静态库Linux与Windows的比较

在linux中库与头文件的联系是什么

2.2 共享库

当同时运行许多应用程序并且他们中都使用来自同一个函数库的函数时,内存中会有同一个函数的许多副本,浪费内存和外存!!当程序使用函数库时,它本身在链接时不再包含函数代码,而是引用运行时可访问的共享代码,当编译好的程序被装载到内存中执行时,函数引用被解析并产生对共享库的调用,如果有必要,共享库才被加载到内存中。即系统可以只在内存中保留共享库的一份副本供许多应用程序调用,在外存上也可只保留一份。而且共享库的更新也可以独立于依赖它的应用程序,应用程序不需再重新编译。
在linux系统中,负责装载共享库并解析客户程序引用的函数的程序(动态装载器)是ld.so

2.2.1 生成方法

用中间文件bill.o fred.o生成共享库libfoo.so gcc -shared -fpic -o libfoo.so bill.o fred.o

在linux中库与头文件的联系是什么

生成了共享库后,要置于标准搜索目录下。搜索共享库的额外位置可以在文件/etc/ld.so.conf中配置,修改这个文件后执行命令ldconfig来处理。
/etc/ld.so.conf的内容为include /etc/ld.so.conf.d/*.conf,在此目录下建立自己的动态链接库路径配置文件mylib.conf

在linux中库与头文件的联系是什么

然后指定搜索路径

在linux中库与头文件的联系是什么

链接生成可执行文件gcc -o main program.o -lfoo -L.

在linux中库与头文件的联系是什么

ldd工具可用来分析可执行文件运行所需要的共享库

在linux中库与头文件的联系是什么

也可以在编译目标代码时指定.so库的搜索路径,通过gcc 的参数-Wl,-rpath指定,如gcc main.cpp -lfoo -L. -Wl,-rpath=.-Wl, 表示后面的参数将传给 link 程序 ld (因为 gcc 会自动调用ld )当指定多个动态库搜索路径时,路径之间用冒号 " : " 分隔。

在linux中库与头文件的联系是什么

“在linux中库与头文件的联系是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

在linux中库与头文件的联系是什么

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

在linux中库与头文件的联系是什么

本篇内容介绍了“在linux中库与头文件的联系是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在linux
2023-03-19

CMake编译中的库文件和头文件链接是什么

这篇文章主要介绍了CMake编译中的库文件和头文件链接是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇CMake编译中的库文件和头文件链接是什么文章都会有所收获,下面我们一起来看看吧。外部库文件、头文件链接
2023-06-29

unix和linux的区别与联系是什么

这篇文章主要介绍“unix和linux的区别与联系是什么”,在日常操作中,相信很多人在unix和linux的区别与联系是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”unix和linux的区别与联系是什么
2023-06-14

Linux下memcpy需要的头文件是什么

小编给大家分享一下Linux下memcpy需要的头文件是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!memcpy指的是C和C++使用的内存拷贝函数,用于 把
2023-06-28

​VC中shellexecute的头文件是什么

shellexecute函数是Windows API中的一个函数,它用于执行外部应用程序、打开网页、打开文档等操作。在C++中,可以通过包含Windows.h头文件来使用shellexecute函数。示例代码:#include int
​VC中shellexecute的头文件是什么
2023-10-30

Linux系统中的文件系统路径是什么

这篇文章主要讲解了“Linux系统中的文件系统路径是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux系统中的文件系统路径是什么”吧!1、Linux文件系统是从/开始的;在Linu
2023-06-12

Linux的共享内存与tmpfs文件系统是什么

本篇内容介绍了“Linux的共享内存与tmpfs文件系统是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言共享内存主要用于进程间通信,
2023-06-16

linux系统中的批量删除文件与空文件删除命令是什么

本篇内容主要讲解“linux系统中的批量删除文件与空文件删除命令是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“linux系统中的批量删除文件与空文件删除命令是什么”吧!linux下面删除文
2023-06-13

C语言中常用的头文件是什么

这篇文章主要介绍“C语言中常用的头文件是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C语言中常用的头文件是什么”文章能帮助大家解决问题。1.:定义了输入输出函数、类型以及宏,
2023-06-17

互联网中流媒体摄像头与普通摄像头的区别是什么

这篇文章主要讲解了“互联网中流媒体摄像头与普通摄像头的区别是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“互联网中流媒体摄像头与普通摄像头的区别是什么”吧!流媒体摄像头与普通摄像头的区别
2023-06-21

Linux文件系统的原理是什么

这篇文章将为大家详细讲解有关Linux文件系统的原理是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、硬盘简介在介绍文件系统前,我们先来了解一下 硬盘。众所周知,内存在断电后数据就会丢
2023-06-15

linux文件系统的结构是什么

这篇文章主要介绍“linux文件系统的结构是什么”,在日常操作中,相信很多人在linux文件系统的结构是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”linux文件系统的结构是什么”的疑惑有所帮助!接下来
2023-03-02

javaSE中的==和equals的联系与区别是什么

本篇内容主要讲解“javaSE中的==和equals的联系与区别是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“javaSE中的==和equals的联系与区别是什么”吧!问题这里先抛出一些比
2023-06-16

Linux系统文件中的三个时间是什么

这篇文章主要介绍了Linux系统文件中的三个时间是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Linux系统文件中的三个时间是什么文章都会有所收获,下面我们一起来看看吧。在Linux系统中文件涉及到三个时
2023-06-27

Linux系统修改文件所在组的命令是什么

小编今天带大家了解Linux系统修改文件所在组的命令是什么,文中知识点介绍的非常详细。觉得有帮助的朋友可以跟着小编一起浏览文章的内容,希望能够帮助更多想解决这个问题的朋友找到问题的答案,下面跟着小编一起深入学习“Linux系统修改文件所在组
2023-06-28

Linux中目录与文件的权限意义是什么

这篇文章主要介绍了Linux中目录与文件的权限意义是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。ls -l和ls -al的区别:第一个不会显示隐藏文件,第二个会显示隐藏
2023-06-09

linux中.a文件指的是什么

这篇文章主要介绍了linux中.a文件指的是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇linux中.a文件指的是什么文章都会有所收获,下面我们一起来看看吧。在linux中,“.a”文件是静态链接库文件;
2023-07-02

编程热搜

目录