关于静态库和动态库的操作

这篇具有很好参考价值的文章主要介绍了关于静态库和动态库的操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

静态库

动态库

1.增加.o文件:

2.删除.o文件:

查看静态库和动态库中的函数名

1.查看静态库中的函数名(以libexample.a为例):

2. 查看动态库中的函数名(以libexample.so为例):

查看动态库和静态库是32位,还是64位

1.  如果是动态库,可以使用: file *.so  

2. 如果是静态库,可以使用objdump -x *.a


静态库

要向静态库中增加一个.o文件,需要执行以下步骤:

  1. 使用ar命令创建一个静态库文件,比如libexample.a:

    ar rcs libexample.a example1.o
    

    这个命令将会创建一个静态库文件libexample.a,并将example1.o文件添加进去。

  2. 如果需要添加一个新的.o文件,可以使用以下命令:

    ar rcs libexample.a example1.o example2.o
    

    这个命令将会把example2.o文件添加到libexample.a中。

  3. 如果需要删除一个.o文件,可以使用以下命令:

    ar d libexample.a example1.o
    

    这个命令将会从libexample.a中删除example1.o文件。

        或者可以使用下面的命令:

ar -x libexample.a
rm example1.o
ar rcs libexample.a *.o

先用ar -x将静态库解压,然后删除对应的.o文件,再把其余的.o文件重新打包

动态库

1.增加.o文件:

如果需要增加新的.o文件到so库中,可以将新的源文件编译成.o文件,然后使用1d命令将多个.o文件链接成一个新的.so库文件,例如:

gcc -c -fPIC -o new file.o new file.c
ld -shared -o new lib.so old lib.so new file.o

其中,-c选项表示编译成目标文件,-fPIC选项表示编译成位置无关代码,-shared 选项表示链接成共享库。这样就可以将新的.o文件添加到原来的.so库文件中


2.删除.o文件:

如果需要删除so库中的某个.o文件,可以使用ar命令提取出其中的所有.o文件,然后将不需要的.o文件删除,最后再将剩余的.o文件重新打包成新的.so库文件,例如:

ar -x old lib.so
rm old file.o
gcc -shared -o new lib.so *.o

其中,-x选项表示提取所有的.o文件,-shared选项表示重新链接成共享库

查看静态库和动态库中的函数名

可以使用以下命令来查看静态库和动态库中的函数名:

1.查看静态库中的函数名(以libexample.a为例):

nm libexample.a

这个命令将会列出libexample.a中所有的符号,包括函数名、变量名等。

2. 查看动态库中的函数名(以libexample.so为例):

nm -D libexample.so

这个命令将会列出libexample.so中所有导出的函数名。请注意,动态库中还会有一些不导出的函数和变量,这些不导出的符号可以使用下面的命令查看:

nm libexample.so

这个命令将会列出libexample.so中所有的符号,包括导出的和不导出的。

T类:是在库中定义的函数,用T表示,这是最常见的;    
U类:是在库中被调用,但并没有在库中定义(表明需要其他库支持),用U表示;    
W类:是所谓的“弱态”符号,它们虽然在库中被定义,但是可能被其他库中的同名符号覆盖,用W表示。

例如: nm *.so | grep printf (*.so中是否引用了printf)

查看动态库和静态库是32位,还是64位

1.  如果是动态库,可以使用: file *.so  

查看动态库libexample.so是32位还是64位:

$ file libexample.so
libexample.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, B

2. 如果是静态库,可以使用objdump -x *.a

objdump是一个反汇编器,可以用于查看二进制文件的各种信息,包括代码段、数据段、符号表、重定位表、动态符号表等等。而objdump -x命令则是用来显示二进制文件的所有头部信息。

具体来说,objdump -x命令会列出二进制文件的各种头部信息,包括文件类型、系统架构、入口地址、段表、符号表、动态符号表、重定位表等等。这些信息对于调试和分析二进制文件非常有用,可以帮助开发人员更好地了解二进制文件的结构和运行时行为。

需要注意的是,objdump -x命令只显示二进制文件的头部信息,如果需要查看更详细的反汇编信息,可以使用其他objdump命令,比如objdump -d命令。文章来源地址https://www.toymoban.com/news/detail-469147.html

到了这里,关于关于静态库和动态库的操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Rust : 与C交互动态库和静态库的尝试

    rust调用C端的库函数,有很多方法,场景也有所不同。包括windows还是linux,内置库还是自定义库,还是三方库等等。 一、rust调用其内置的C库 这个很简单,直接把extern \\\"C\\\"引入即可: 比如,在rust端main.rs中: 不需要做其它的处理,直接cargo run 就可以运行。 二、自定义的C库-以

    2024年02月04日
    浏览(49)
  • windows下qt使用第三方库(静态链接库lib)、静态库和动态库区别、动态库的使用。

    这里主要是讲述windows下qt使用第三方库。 windows下qt使用第三方库(静态链接库lib)。 为了能够使测试更准确,首先自己用qt创建了一个已经封装好的lib库。 然后让另一个项目去链接这个lib静态库,并且去调用里面的方法。 目的: 使 untitled项目 能够使用 myllplib.lib 静态库,这

    2023年04月17日
    浏览(96)
  • 【Linux系统编程】Linux下的编译器——gcc/g++的使用 及 动态库和静态库的认识

    这篇文章我们继续学习Linux中的开发工具,今天要学的是: Linux下的编译器——gcc/g++ 我们先来简单了解一下它们的概念: gcc (GNU Compiler Collection) 和 g++ 是 Linux 系统上最常用的编译器。它们是 GNU 组织开发的一套开源编译器工具集。 gcc: gcc 是 GNU 编译器集合中的 C 语言编译器。

    2024年02月16日
    浏览(44)
  • Linux操作命令&静态库和动态库区别&大小端&孤儿僵尸进程

    cd:切换当前目录 ls:查看当前文件与目录 grep:通常与管道符命令一起使用,用于对一些命令的输出进行筛选和加工 cp:复制文件或文件夹 mv:移动文件或文件夹 rm:删除文件或文件夹 ps:查看进程情况 kill:向进程发送信号 tar:对文件进行打包 cat:查看文件内容 top:查看

    2024年02月16日
    浏览(42)
  • 关于不同版本VS编译获得的静态库、动态库的兼容性

    看了上一篇博客还是在6月13号,一直想着写一些东西,也准备了很多内容,没想到一直拖到了现在。今天终于掀开了我的笔记本盖子,按下了开机按钮,双击浏览器图标打开了博客页(浏览器图标都差点找不到了~~),赶紧写完一篇睡觉,明晚还要给我的小可爱做饭呢。。。

    2024年02月05日
    浏览(41)
  • 动态库和静态库

    1. 静态库(.a):程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时候将不再需要静态库。 2. 动态库(.so):程序在运行的时候才去链接动态库的代码,多个程序共享使用库的代码。 3. 一个与动态库链接的可执行文件仅仅包含它用到的函数入口地址的一个

    2024年02月09日
    浏览(31)
  • 制作静态库和动态库

    目录 制作静态库 ar命令 使用makefile制作静态库 如何发布自己的静态库给别人呢? 如何使用静态库呢? 方法一 方法二 制作动态库 使用动态库遇到的问题 上面的问题如何解决呢?(如何使用动态库) 1.方法一 2.方法二 3.方法三 4.方法四 搜索优先级 Linux默认头文件的搜索顺序

    2024年02月03日
    浏览(35)
  • 【Linux】动态库和静态库

    软链接 命令: ln -s 源文件名 目标文件名 软链接是独立连接文件的,他有自己的inode number,有自己的inode属性和内容。 软链接内部存放的是自己所指向文件的路径。 现实中,我们软链接的应用有,例如电脑桌面的快捷模式等。 inode number 不相同 硬链接 命令: ln 源文件目标文件

    2024年02月11日
    浏览(43)
  • Linux之静态库和动态库

    目录 一、前言 二、对于库的理解 三、静态库 四、动态库 五、动静态库的加载 在之前,我们讲了静态库和动态库,详情请跳转:静态库和动态库 下面我们将从工程师的角度,去了解静态库和动态库的形成过程,以及实现它们的制作。并且了解如何将自己的库交给别人,让别

    2024年01月20日
    浏览(36)
  • [静态库和动态库][VS2022]

    我们写代码,可以分模块去写,最后可以协作,能整合起来; 可以吧代码的实现和声明分离。 比如:我的这篇博客C语言猜拳小游戏就用到了模块化编程 什么是库: 库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库本质上来说库是一

    2024年02月15日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包