本シリーズのトップページ |
---|
https://qiita.com/robozushi10/items/fc185b5da0509b9a631f |
はじめに
本記事の趣旨は「01 概要」に記しているが、
13年前(=2008年) に職場のプログラムの挙動をマネて実装した
「コンソールから関数を呼び出す機構」の振り返りである.
本項では「ファイルの構成」と「Makefile」について記す.
ファイル構成
make 実行後(コンパイル & リンク後)の状態である
.
|-- Makefile
|-- test_driver.c ..... 今回デバッグしたい関数が実装されたコード
|-- priv_cfn_invoke.h . stdin からの入力待受け、および、test_driver.c の公開関数呼び出し処理の宣言部
|-- cfn_invoke.c ...... 上記の priv_cfn_invoke.h の実装部
|-- mk_sym_tbl.rb ..... 生成された *.o から readelf -s を使って公開関数名を抽出する
|-- cfn.extern.h ...... 上記 mk_sym_tbl.rb から生成された関数の extern宣言.
| コンパイル&リンクエラー回避のために用いる.
`-- cfn.tbl.h ......... 上記 mk_sym_tbl.rb から生成された関数名と関数アドレスを定義したヘッダ
Makefile
SRCS = test_driver.c
OBJS = $(SRCS:.c=.o)
MUSTSRC = cfn_invoke.c priv_cfn_invoke.h
all: $(SRCS)
gcc -c $(SRCS)
./mk_sym_tbl.rb $(OBJS)
gcc -g $(MUSTSRC) $(OBJS)
clean:
rm -f *.o *~ a.out