gdb调试

制作链接库的目的是希望别人使用我们已经实现的功能,但又不希望别人看到我们的源代码Linux
下的静态链接库是以.a
结尾的二进制文件,它作为程序的一个模块,在链接期间被组合到程序中。和静态链接库相对的是动态链接库(.so文件),它在程序运行阶段被加载进内存。
静态库生成步骤
1 | //1 对所有源文件,只编译不链接 |
ar
是 Linux 的一个备份压缩命令,它可以将多个文件打包成一个备份文件(也叫归档文件),也可以从备份文件中提取成员文件,最常见的用法是将目标文件打包为静态链接库。
对参数的说明:
- r:用来替换库中已有的目标文件,或者加入新的目标文件。
- c:表示创建一个库。不管库否存在,都将创建。
- s:用来创建目标文件索引,这在创建较大的库时能提高速度。
- -lm:表示连接系统的数学库libm.a
- 需要放在库之后,不然找不到
Linux 下动态链接库(shared object file,共享对象文件)的文件后缀为.so,它是一种特殊的目标文件(object file),可以在程序运行时被加载(链接)进来。
使用动态链接库的优点是:程序的可执行文件更小,便于程序的模块化以及更新,同时,有效内存的使用效率更高
- 如果想创建一个动态链接库,可以使用 GCC 的-shared选项。输入文件可以是源文件、汇编文件或者目标文件。
- 另外还得结合
-fPIC
选项。-fPIC
选项作用于编译阶段,告诉编译器产生与位置无关代码(Position-Independent Code);这样一来,产生的代码中就没有绝对地址了,全部使用相对地址,所以代码可以被加载器加载到内存的任意位置,都可以正确的执行。这正是共享库所要求的,共享库被加载时,在内存的位置不是固定的。
1 | 从源文件生成动态链接库: |
- Post title:gdb调试
- Post author:Wei Jieyang
- Create time:2020-12-14 17:56:55
- Post link:https://jieyang-wei.github.io/2020/12/14/gdb调试/
- Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.