天天看點

如何在 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 `

繼續閱讀