大家都知道在 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 `