当前位置:   article > 正文

Linux 动态库和GDB的使用_linux动态库 要求

linux动态库 要求

Linux 动态库和GDB的使用

1.动态库的定义

在大型的嵌入式软件中,一般会分模块的进行开发,最终某个模块的部分会以动态库的方式给出来给需要的人调用,一般有动态库和

静态库的方式,但是静态库的占用内存太大,我们一般用动态库的方式开发。

2.动态库的生成和使用

gcc demo.c -o demo.o -fPIC
gcc -shared demo.o -o libdemo.so  //生成 libdemo.so动态库文件
mkdir include ; mkdir lib ; mv demo.h include/ ; mv libdemo.so lib/
gcc main.c -ldemo -o main -I./include -L./lib
//运行可执行文件时需要指定动态库的路径
export LD_LIBRARY_PATH=./lib
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

demo.h头文件

#ifndef _DEMO_H_
#define _DEMO_H_

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int add1(int a, int b);
int sub1(int a, int b);
int div1(int a, int b);

#endif
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

demo.c源文件

#include "demo.h"

int add1(int a, int b)
{

        return a + b;
}

int sub1(int a, int b)
{
        return a - b;
}

int div1(int a, int b)
{
        return a /b;

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

main.c源文件

#include "demo.h"

int main(int argc, char *argv[])
{
        int a = 20, b = 4;
		
    	printf("%s %s\n", argv[1], argv[2]);
        printf("%d + %d = %d\n",a, b, add1(a, b));
        printf("%d - %d = %d\n",a, b, sub1(a, b));
        printf("%d / %d = %d\n",a, b, div1(a, b));

        return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

3.GDB的定义

GDB 全称“GNU symbolic debugger”,从名称上不难看出,它诞生于 GNU 计划(同时诞生的还有 GCC、Emacs 等),是 Linux 下常用的程序调试器。我们在编译程序的时候需要加上 -g 选项,系统会在编译的时候加上调试信息

1.gdb的常用命令

命令命令缩写作用
gdb + 可执行文件使用gdb调试目标程序
runr运行程序
break + nb设置断点
start运行至主函数的起始位置停下
steps单步执行,遇到函数会进入
nextn单步执行,遇到函数不会进入
run + 参数执行程序带入参数运行
set args + 参数设置带入参数的值
finishfi结束当前函数调用,回到上一层函数处
backtracebt查看当前线程调用的堆栈(栈帧)
framef + n切换到具体的堆栈处
listl查看调试源码
info bi + b查看断点信息
show args显示带入参数的值
break +n if var = n设置断点,并且设置循环的变量
delete + n删除断点(使用info break 显示的断点编号)
continue出发断点后程序继续运行
disable + n禁用某个断点
enable + n使能某个断点
until程序执行到指定位置停下来
ptype var查看变量类型
display var一直跟踪变量var
undisplay + 跟踪变量编号取消跟踪变量var
quitq退出gdb调试

打印变量值和类型时,需要运行到某个函数的栈帧上查看

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/神奇cpp/article/detail/742372
推荐阅读
相关标签
  

闽ICP备14008679号