iis服务器助手广告广告
返回顶部
首页 > 资讯 > 操作系统 >Linux系统so文件内容有哪些
  • 531
分享到

Linux系统so文件内容有哪些

2023-06-28 14:06:34 531人浏览 泡泡鱼
摘要

本篇内容主要讲解“linux系统so文件内容有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux系统so文件内容有哪些”吧!1.so文件简介:也是ELF格式文件,共享库(动态库),类似

本篇内容主要讲解“linux系统so文件内容有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux系统so文件内容有哪些”吧!

Linux系统so文件内容有哪些

1.so文件简介:

也是ELF格式文件,共享库(动态库),类似于DLL。节约资源,加快速度,代码升级简化。 知道这么多就够了,实用主义。等有了印象再研究原理。

2.怎么生成以及使用一个so动态库文件?

先写一个C文件:s.c

 #include  int count;   void out_msg(const char *m)   {//2秒钟输出1次信息,并计数        for(;;) {printf("%s %d\n", m, ++count); sleep(2);}   }

编译:得到输出文件libs.o gcc -fPIC -g -c s.c -o libs.o

-fPIC:  -fPIC作用于编译阶段,告诉编译器产生与位置无关代码(Position-Independent Code),则产生的代码中,没有绝对地址,全部使用相对地址,故而代码可以被加载器加载到内存的任意 位置,都可以正确的执行。这正是共享库所要求的,共享库被加载时,在内存的位置不是固定的。

-g:  令 GCc 生成调试信息,该选项可以利用操作系统的“原生格式(native fORMat)”生成调试信息。GDB 可以直接利用这个信息,其它调试器也可以使用这个调试信息

-c:  仅执行编译操作,不进行连接操作。 -o:  指定生成的输出文件名称

注意!-c,-o是指.c文件和.o文件!!

得到输出文件libs.so gcc -g -shared -Wl,-soname,libs.so -o libs.so libs.o -lc

上述语句中 libs.o是输入文件

-shared:

-Wl: 注意第二个字母是小写的L,不是I

-soname:

  soname的关键功能是它提供了兼容性的标准:

  当要升级系统中的一个库时,并且新库的soname和老库的soname一样,用旧库链接生成的程序使用新库依然能正常运行。这个特性使得在Linux下,升级使得共享库的程序和定位错误变得十分容易。

  在Linux中,应用程序通过使用soname,来指定所希望库的版本,库作者可以通过保留或改变soname来声明,哪些版本是兼容的,这使得程序员摆脱了共享库版本冲突问题的困扰。

-lc:

  -l 是直接加上某库的名称,如-lc是libc库 -L 是库的路径,搜索的时候优先在-L目录下搜索

一个头文件:s.h

 #ifndef _MY_SO_HEADER_   #define _MY_SO_HEADER_   void out_msg(const char *m);   #endif

再来一个C文件来引用这个库中的函数:ts.c

  #include   #include "s.h"    int main(int argc, char** argv)    {       printf("TS Main\n");       out_msg("TS ");       sleep(5);  //这句话可以注释掉,在第4节的时候打开就可以。       printf("TS Quit\n");    }

编译链接这个文件:得到输出文件ts gcc -g ts.c -o ts -L. -ls

执行./ts,嗯:成功了。。。还差点 得到了ts:error while loading shared libraries: libs.so: cannot open shared object file: No such file or directory 系统不能找到我们自己定义的libs.so,那么告诉他,修改变量LD_LIBRARY_PATH,为了方便,写个脚本:e(文件名就叫e,懒得弄长了)

 export LD_LIBRARY_PATH=${pwd}:${LD_LIBRARY_PATH} ./ts

执行:./e & 屏幕上就开始不停有信息输出了,当然TS Quit你是看不到的,前面是个死循环,后面会用到这句

———————-

& 放在启动参数后面表示设置此进程为后台进程。默认情况下,进程是前台进程,这时就把shell给占据了,我们无法进行其他操作,对于那些没有交互的进程,很多时候,我们希望将其在后台启动,可以在启动参数的时候加一个’&’实现这个目的。

———————-

3.地址空间,以及线程安全: 如果这样: ./e &开始执行后,稍微等待一下然后再 ./e&, 这个时候屏幕信息会怎么样呢?全局变量count会怎么变化? 会是两个进程交叉输出信息,并且各自的count互不干扰,虽然他们引用了同一个so文件。 也就是说只有代码是否线程安全一说,没有代码是否是进程安全这一说法。

下面的还没细看,汗

4.库的初始化,解析: windows下的动态库加载,卸载都会有初始化函数以及卸载函数来完成库的初始化以及资源回收,linux当然也可以实现。 ELF文件本身执行时就会执行一个init()函数以及fini()函数来完成这个,我们只要把自己的函数能让系统在这个时候执行 就可以了。 修改我们前面的s.c文件:

 #include   void my_init(void) __attribute__((constructor)); //告诉gcc把这个函数扔到init section    void my_fini(void) __attribute__((destructor));  //告诉gcc把这个函数扔到fini section    void out_msg(const char *m)    {     printf(" Ok!\n");    }    int i; //仍然是个计数器    void my_init(void)    {     printf("Init ... ... %d\n", ++i);    }    void my_fini(void)    {     printf("Fini ... ... %d\n", ++i);    }

重新制作 libs.so,ts本是不用重新编译了,代码维护升级方便很多。 然后执行: ./e & 可以看到屏幕输出:(不完整信息,只是顺序一样) Init Main OK Quit Fini 可以看到我们自己定义的初始化函数以及解析函数都被执行了,而且是在最前面以及最后面。 如果s.c中的sleep(5)没有注释掉,那么有机会: ./e& ./e&连续执行两次,那么初始化函数和解析函数也会执行两次,虽然系统只加载了一次libs.so。 如果sleep时候kill 掉后台进程,那么解析函数不会被执行。

5.使用我们自己库里的函数替换系统函数: 创建一个新的文件b.c:我们要替换系统函数malloc以及free(可以自己写个内存泄露检测工具了)

 #include   void* malloc(int size)    {     printf("My malloc\n");     return NULL;    }    void free(void* ad)    {     printf("My free\n");    }

老规矩,编译链接成一个so文件:得到libb.so gcc -fPIC -g -c b.c -o libb.o gcc -g -shared -Wl,-soname,libb.so -o libb.so -lc 修改s.c:重新生成libs.so

 void out_msg()    {     int *p;     p = (int*)malloc(100);     free(p);     printf("Stop Ok!\n");    }

修改脚本文件e:

 export LD_PRELOAD=${pwd}libb.so:${LD_PRELOAD} export LD_LIBRARY_PATH=${pwd}:${LD_LIBRARY_PATH} ./ts

关键就在LD_PRELOAD上了,这个路径指定的so将在所有的so之前加载,并且符号会覆盖后面加载的so文件中的符号。如果可执行文件的权限不合适(SID),这个变量会被忽略。 执行:./e & 嗯,可以看到我们的malloc,free工作了。

到此,相信大家对“Linux系统so文件内容有哪些”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: Linux系统so文件内容有哪些

本文链接: https://www.lsjlt.com/news/319955.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • Linux系统so文件内容有哪些
    本篇内容主要讲解“Linux系统so文件内容有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux系统so文件内容有哪些”吧!1.so文件简介:也是ELF格式文件,共享库(动态库),类似...
    99+
    2023-06-28
  • Linux系统中的文件目录有哪些内容
    这篇文章主要介绍“Linux系统中的文件目录有哪些内容”,在日常操作中,相信很多人在Linux系统中的文件目录有哪些内容问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux系统中的文件目录有哪些内容”的疑...
    99+
    2023-06-16
  • Linux系统查看文件内容命令有哪些
    这篇“Linux系统查看文件内容命令有哪些”除了程序员外大部分人都不太理解,今天小编为了让大家更加理解“Linux系统查看文件内容命令有哪些”,给大家总结了以下内容,具有一定借鉴价值,内容详细步骤清晰,细节处理妥当,希望大家通过这篇文章有所...
    99+
    2023-06-28
  • linux系统日志文件包含的内容有哪些
    今天小编给大家分享一下linux系统日志文件包含的内容有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一...
    99+
    2023-02-17
    linux
  • Node的文件系统有哪些内容
    今天小编给大家分享一下Node的文件系统有哪些内容的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、Node的文件系统1、F...
    99+
    2023-06-29
  • linux makefile文件有哪些内容
    本篇内容主要讲解“linux makefile文件有哪些内容”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“linux makefile文件有哪些内容”吧!#sample Makefileedit...
    99+
    2023-06-17
  • Linux系统文件权限有哪些
    本篇内容介绍了“Linux系统文件权限有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!常用权限linux系统内有档案有三种身份 u:拥有...
    99+
    2023-06-27
  • Linux系统文件类型有哪些
    Linux系统文件类型有哪些,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Linux系统中一切皆为文件,所以会有不同的文件类型,总的来说总共会有七种类型,下面一起来看看这七种文...
    99+
    2023-06-28
  • Linux中有哪些有哪些常用的文件系统
    本篇文章给大家分享的是有关Linux中有哪些有哪些常用的文件系统,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Linux操作系统使用虚拟文件系统(VFS)向上和用户进程文件访问...
    99+
    2023-06-13
  • linux系统中文件属性有哪些
    这篇文章给大家分享的是有关linux系统中文件属性有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Linux 文件或目录的属性主要包括:文件或目录的节点、种类、权限模式、链接数量、所归属的用户和用户组、最近访...
    99+
    2023-06-13
  • Linux系统中有哪些重要文件
    Linux系统中有哪些重要文件,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1. profile文件1.1 profile文件的作用profile(/etc/profile...
    99+
    2023-06-16
  • Linux系统中常见的文件系统有哪些?
      Linux系统是现在非常受欢迎的操作系统,在Linux之中,一切都是文件,因为有很多操作都是依靠文件系统才可以完成的,而且文件系统可以满足用户正常的使用,那么Linux中常见的文件系统有哪些为大家介绍一下。  总体来说,在Linux之中...
    99+
    2023-06-05
  • linux与windows文件系统有哪些区别
    本篇内容介绍了“linux与windows文件系统有哪些区别”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!区别:1、linux文件系统区分大...
    99+
    2023-06-29
  • Linux系统创建文件命令有哪些
    这篇文章主要介绍Linux系统创建文件命令有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、touch命令  linux的touch命令不常用,一般在使用make的时候可能会用到,用来修改文件时间戳,或者新建一...
    99+
    2023-06-28
  • Linux文件系统的知识点有哪些
    这篇文章主要介绍“Linux文件系统的知识点有哪些”,在日常操作中,相信很多人在Linux文件系统的知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux文件系统的知识点有哪些”的疑惑有所帮助!...
    99+
    2023-06-30
  • linux文件系统常用命令有哪些
    这篇文章主要介绍“linux文件系统常用命令有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“linux文件系统常用命令有哪些”文章能帮助大家解决问题。linux文件系统常用命令:1、Rcomme...
    99+
    2023-07-04
  • Linux系统的etc目录有哪些文件
    这篇文章主要介绍“Linux系统的etc目录有哪些文件”,在日常操作中,相信很多人在Linux系统的etc目录有哪些文件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux系统的etc目录有哪些文件”的疑...
    99+
    2023-06-13
  • Linux系统怎么批量修改文件内容
    这篇文章主要为大家分析了Linux系统怎么批量修改文件内容的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟随小编一起来看看,下面跟着小编一起深入学习“Linux系统怎么批量修改文件内容”的知识吧。方法一...
    99+
    2023-06-28
  • RedHat系统中有哪些重要内核文件
    RedHat系统中有哪些重要内核文件?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。  一、vmlinuz  vmlinuz是可引导的、压缩的内核。“vm”代表“Virtual ...
    99+
    2023-06-07
  • PHP中有哪些内容管理系统
    本篇文章为大家展示了PHP中有哪些内容管理系统,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。01 WordPressWordPress 是一个功能强大且易...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作