以前書いた記事 で 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