"csapp.c"文件在 CentOS 7下生成动态库文件并使用

  最近在看《深入理解计算机系统(第三版)》,书里面一些示例代码用到了一些包装函数,这些包装函数对一些函数的进行了简单的包装,目的是为了使得代码更加简洁。这些函数都定义在"csapp.c"文件中,相应的头文件为"csapp.h"文件。为了方便以后的使用,我将"csapp.c"文件生成动态链接库文件。
  根据别人博客中的说法,linux系统中动态库的搜索路径为(参考于这里[1],[2],[3],[4]):

  • 编译目标代码时指定的动态库搜索路径;如:gcc -Wl,-rpath=/xxx/lib
  • 环境变量LD_LIBRARY_PATH指定的动态库搜索路径;
  • 配置文件/etc/ld.so.conf中指定的动态库搜索路径;
  • 默认的动态库搜索路径/lib;
  • 默认的动态库搜索路径/usr/lib。

  第一种方式比较麻烦,每次都要用完整的动态库文件的路径参数指定生成的动态库的具体位置,最后两种方式只需要将生成的动态库文件放入对应的目录下即可。对于自己生成的库文件似乎一般是放在/usr/local/lib目录下(参考于这里),但是以上动态库的搜索路径不包含该目录。这时我们需要将该目录放到环境变量LD_LIBRARY_PATH中或配置文件/etc/ld.so.conf中。对于第三中方法,当我们将动态库目录添加中配置文件/etc/ld.so.conf中之后还要运行一次命令:ldconfig,该命令将配置文件/etc/ld.so.conf更新后的内容更新到文件/etc/ld.so.cache中,因为动态库搜索时实际搜索的是该文件而不是配置文件/etc/ld.so.conf。这里我们采用第三种方法。

  1. 将"csapp.c"文件生成动态库文件
 
图1. 生成动态库文件
  1. 将生成的动态库文件添加到系统
 
图2. 将生成的动态库文件添加到/usr/local/lib目录

  查看配置文件/etc/ld.so.conf我们知道搜索动态库时会搜索目录/etc/ld.so.conf.d下所有".conf"文件中的目录,但是这些文件中都没有包含目录/usr/local/lib。我们因此新建一个"local.conf"文件并将该目录放在该文件中。(参考于这里

 
图3. 查看配置文件/etc/ld.so.conf并添加local.conf文件
  1. 编译用到了动态库中函数的源文件并运行

  这里的源文件用到了"csapp.c"中的包装函数"Fork"。由于这里我们生成的库"libcsapp.so"和"pthread"库都不是linux系统默认的库,因此必须加上对应库的名字参数"-lpthread"和"-lcsapp"。(参考于这里这里)即使是我们已经将我们生成的动态库的文件路径添加到了搜索路径中。这里比较特殊的一点是,在linux系统中不使用头文件“pthread.h”和“csapp.h”程序编译也可以通过并运行,只是会有警告而已,但是在windows系统中就不行。

 
图4.编译用到了动态库中函数的源文件并运行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qqssss121dfd

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值