前言
最近遇到了一题去除符号的题目,需要进行符号修复。为此学习了一波,顺便补了补其它的一下知识。
准备知识
命名方式:
动态库libxxx.so.major.minor .so .dll
静态库:libxxx.a .a .lib
生成动态库 gcc -shared -o libxxx.so.1.0 hello.o
生成静态库 ar cqs libxxx.a hello.o
用于设置动态库的路径 export LD_LIBRARY_PATH
用于设置静态库的路径 export LIBRARY_PATH
ldd工具:查看依赖的动态库和静态库
nm工具:查看静态库和动态库中的函数名。T类当前库中定义的,U类表示是被调用的,W类表示可能被覆盖的
strip工具 可以去除程序的符号,缩小程序体积
在linux下gcc默认的编译选项就是动态库
ar -r 更新静态库
ar -d -v libxxx.a module.o 删除静态库中的某一模块
ar -t libxxx.a 列出静态库中包含的模块
ar -s 相当于ranlib,用于更新符号索引表
实验
首先我自己写了个简单的hello程序