mattintosh note

どこかのエンジニアモドキの備忘録

How to make libgsm.dylib on OS X (part2)

以前書いた記事Makefile を書き換えたけど不要だった。

Makefile を見ると $(LIBGSM) ターゲットの $(AR)$(ARFLAGS) を書き換えれば共有ライブラリ用のコマンドにできそう。

Makefile

:
    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 i386OS 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