目录
静态库
动态库
1.增加.o文件:
2.删除.o文件:
查看静态库和动态库中的函数名
1.查看静态库中的函数名(以libexample.a为例):
2. 查看动态库中的函数名(以libexample.so为例):
查看动态库和静态库是32位,还是64位
1. 如果是动态库,可以使用: file *.so
2. 如果是静态库,可以使用objdump -x *.a
静态库
要向静态库中增加一个.o文件,需要执行以下步骤:
-
使用ar命令创建一个静态库文件,比如libexample.a:
ar rcs libexample.a example1.o
这个命令将会创建一个静态库文件libexample.a,并将example1.o文件添加进去。
-
如果需要添加一个新的.o文件,可以使用以下命令:
ar rcs libexample.a example1.o example2.o
这个命令将会把example2.o文件添加到libexample.a中。
-
如果需要删除一个.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命令会列出二进制文件的各种头部信息,包括文件类型、系统架构、入口地址、段表、符号表、动态符号表、重定位表等等。这些信息对于调试和分析二进制文件非常有用,可以帮助开发人员更好地了解二进制文件的结构和运行时行为。文章来源:https://www.toymoban.com/news/detail-469147.html
需要注意的是,objdump -x命令只显示二进制文件的头部信息,如果需要查看更详细的反汇编信息,可以使用其他objdump命令,比如objdump -d命令。文章来源地址https://www.toymoban.com/news/detail-469147.html
到了这里,关于关于静态库和动态库的操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!