2009年2月28日

共有ライブラリを作って呼んでみる

共有ライブラリで発生した異常をgdbで調べてみる実験をしたく、まずは、共有ライブラリを作成&実験してみた。
環境は、以下。

  • 2.6.18-92.1.22.el5

  • gcc (GCC) 4.1.2 20071124 (Red Hat 4.1.2-42)

にほんブログ村 IT技術ブログ オープンソースへ
にほんブログ村

以下のファイルをそれぞれ作成してから、make; sh run.shと実行すればめでたく(?)core発生。
"Makefile"
all : test_core

clean :
        rm -f test_core test_core.o liba.so liba.so.1 liba.so.1.0 liba.o
        rm -f core.*

test_core : test_core.o liba.so.1.0
        gcc -g -o test_core test_core.o -L. -la

test_core.o : test_core.c
        gcc -Wall -g -c test_core.c -o test_core.o

liba.so.1.0 : liba.o
        gcc -g -shared -Wl,-soname,liba.so.1 -o liba.so.1.0 liba.o -lc
        ln -sf liba.so.1 liba.so
        ln -sf liba.so.1.0 liba.so.1

liba.o : liba.c liba.h
        gcc -fpic -g -c -Wall liba.c

"liba.h"
int liba();

"liba.c"
int liba()
{
        int i = 10 / 0;
        return 0;
}

"test_core.c"
//
//      coreダンプをあえて作成するプログラム
//
#include "liba.h"

int main(void)
{
        liba();
        return 0;
}

"run.sh"
#!/bin/sh
ulimit -c unlimited
LD_LIBRARY_PATH="."; export LD_LIBRARY_PATH
./test_core
参考資料
GNUソフトウェアプログラミング オープンソース開発の原点 [本] GNUソフトウェアプログラミング オープンソース開発の原点   [本]
販売元:セブンアンドワイ ヤフー店
セブンアンドワイ ヤフー店で詳細を確認する


0 件のコメント:

コメントを投稿