以前書いた記事 で Makefile を書き換えたけど不要だった。
Makefile を見ると $(LIBGSM) ターゲットの $(AR) と $(ARFLAGS) を書き換えれば共有ライブラリ用のコマンドにできそう。
:
46 CC = gcc -ansi -pedantic
47 CCFLAGS = -c -O2 -DNeedFunctionPrototypes=1
:
101 AR = ar
102 ARFLAGS = cr
:
142 LIBGSM = $(LIB)/libgsm.a
:
302 $(LIBGSM): $(LIB) $(GSM_OBJECTS)
303 -rm $(RMFLAGS) $(LIBGSM)
304 $(AR) $(ARFLAGS) $(LIBGSM) $(GSM_OBJECTS)
305 $(RANLIB) $(LIBGSM)
:
$(AR) を gcc、$(ARFLAGS) を共有ライブラリ作成用のコマンドに変更して make する。$(ARFLAGS) 内の $(LIBGSM) は make 時に変数 LIBGSM が展開される。RANRIB は使用しないため : もしくは true でパスするようにしておく。-arch i386 は OS X 10.6 上でビルドする際の 32-bit 用なので x86_64 の場合は特に必要ない。
make /usr/local/lib/libgsm.dylib \ LIBGSM=/usr/local/lib/libgsm.dylib \ CCFLAGS="-c -O3 -DNeedFunctionPrototypes=1 -arch i386" \ AR=gcc \ ARFLAGS="-dynamiclib -v -arch i386 -install_name \$(LIBGSM) -compatibility_version 1 -current_version 1.0.13 -o" \ RANLIB=: \ RMFLAGS="-f"
実際に実行されるコマンド。
gcc -dynamiclib -v -arch i386 -install_name /usr/local/lib/libgsm.dylib -compatibility_version 1 -current_version 1.0.13 -o /usr/local/lib/libgsm.dylib ./src/add.o ./src/code.o ./src/debug.o ./src/decode.o ./src/long_term.o ./src/lpc.o ./src/preprocess.o ./src/rpe.o ./src/gsm_destroy.o ./src/gsm_decode.o ./src/gsm_encode.o ./src/gsm_explode.o ./src/gsm_implode.o ./src/gsm_create.o ./src/gsm_print.o ./src/gsm_option.o ./src/short_term.o ./src/table.o
gsm.h は手動でインストールする。
install -m 0644 inc/gsm.h /usr/local/include/gsm.h