天天看点

如何在 Linux 下调试动态链接库

大家都知道在 Linux 可以用 gdb 来调试应用程序,当然前提是用 gcc 编译程序时要加上

-g 参数。

我这篇文章里将讨论一下用 gdb 来调试动态链接库的问题。

首先,假设我们准备这样的一个动态链接库:

QUOTE :

库名称是: ggg

动态链接库文件名是: libggg. so

头文件是: get. h

提供这样两个函数调用接口:

    int get ();

    int set (int a );

要生成这样一个动态链接库,我们首先编写这样一个头文件:

int get ();

int set (int a );

然后准备这样一个生成动态链接库的源文件:

#include <stdio.h >

#include "get.h"

static int x=0 ;

int get ()

{

        printf ("get x=%d\n", x );

        return x ;

}

int set (int a )

{

        printf ("set a=%d\n", a );

        x = a ;

        return x ;

}

然后我们用 GNU 的 C/C++ 编译器来生成动态链接库,编译命令如下:

QUOTE :

g++ get.cpp -shared -g -DDEBUG -o libggg. so

这样我们就准备好了动态链接库了,下面我们编写一个应用程序来调用此动态链接库,源代码如下:

#include <stdio.h >

#include "get.h"

int main (int argc, char** argv )

{

        int a = 100 ;

        int b = get ();

        int c = set (a );

        int d = get ();

        printf ("a=%d,b=%d,c=%d,d=%d\n",a,b,c,d );

        return 0 ;

}

编译此程序用下列命令,如果已经把上面生成的 libggg.so 放到了库文件搜索路径指定的文件目录,比如 /lib 或 /usr/lib 之类的,就用下面这条命令:

QUOTE :

g++ pk.cpp -o app -Wall -g - lggg

否则就用下面这条命令:

QUOTE :

g++ pk.cpp -o app -Wall -g -lggg -L`pwd `

继续阅读