GSM 06.10 lossy speech compression
2010/01/25 追記
サイトはこちらへ移転していました。
ソースコードもダウンロードできます。
http://www.quut.com/gsm/
- free sourcecode から、
gsm-1.0.16.tar.gzを、適当なディレクトリに保存します。
MSYSで、ファイルを保存したディレクトリに移動し、
$ tar xzf gsm-1.0.16.tar.gz
$ cd gsm-1.0-pl16
Makefileを、以下のように修正します。
74行目
修正前) INSTALL_ROOT =
修正後) INSTALL_ROOT = /mingw
83行目
修正前) GSM_INSTALL_INC = $(GSM_INSTALL_ROOT)/inc
修正後) GSM_INSTALL_INC = $(GSM_INSTALL_ROOT)/include
上記の修正を手動でするか、以下のパッチを適用します。
$ patch -p1 < gsm-makefile.diff
以上の修正が終わったら、
$ make
$ make gsminstall
以上で終了です。
【補足】
makeの時に以下のようなエラーが出ますが、libgsm.aまではmake出来ているので、とりあえず今は無視します。
というか、解決できませんでした。
./src/toast.o:toast.c:(.text+0xcfc): undefined reference to `fchmod'
./src/toast.o:toast.c:(.text+0xd40): undefined reference to `fchown'
collect2: ld returned 1 exit status
make: *** [bin/toast] Error 1
2010/04/12 追記
fchmodとfchown関連のエラー対処用のパッチを作成しました。(Pochiさん情報)
以下のようにパッチを適用してください。
$ patch -p1 < gsm-toast.diff
このパッチにより「toast.exe」などのツールが出来上がるようになります。
FFmpegにはlibgsm関連しか使用しませんので、ツールが必要な方はパッチを適用してください。
【更新履歴】を見る
最初にmakeではなくmake -tで各ファイルに
タッチしておくと強引ですができそうです。
makeでやると最初の
src/code.o
で止まりました。
同じアーカイブでやったはずなのに異なる結果でした。
前の人同様、2個目のcコンパイルでコケる。
当座、以下修正で通りましたけど、同バージョンなのに中身違うとかあるんですかね。。。
46行目
修正前) CC = gcc -ansi -pedantic
修正後) CC = gcc -pedantic
ansi非対応コードかよ。。。_| ̄|○
こちらではmake -iで、エラーが出ても止めずに強制的にやりました。
にしても、アーカイブの最終更新が2000年より前ですから、もう作り直す気はないのかもしれませんね。となると、このバグは直らないのかなぁ…。
2007年でした。
MinGWのページから、MinGW Runtimeを以下の最新版にアップデートすると、-ansi -pedanticでもコンパイル出来ますよ。
mingwrt-3.15.2-mingw32-dev.tar.gz
mingwrt-3.15.2-mingw32-dll.tar.gz
その他にも、win32api、binutils、sh、makeなども最新版にしておいた方が良いかもしれません。
あれ…?Runtimeは一度新しくしたはずなのになあ。
fchown 参照エラーは inc/config.h の HAS_FCHOWN, HAS_FCHMOD, HAS_CHOWN をコメントアウトすれば取り敢えず無くなります。
情報ありがとうございました。
おかげさまで、解決できずに長らく放置していた問題が解決しました!
そんなところに問題があったとは盲点でした…。
記事に追記しておきます。
ありがとうございました。
http://hawkeye.arrozcru.org/source/external_libraries/gsm-1.0.13-3.tar.bz2
元のソースは変わっていないみたいなので、
libgsm-1.0.13/debian/patches
にあるパッチを当てれば良いんでしょうか?
時間がある時に試してみます。
ffmpegのconfigコマンドを実行したとき、ERROR: libgsm not foundとなってしまいます。
ffmpeg本体にffmpeg-20110516.diffをあてる場合↓
$ cd gsm-*
$ make
$ install -m 644 lib/libgsm.a /mingw/lib/
$ install -m 644 inc/gsm.h /mingw/include/
ffmpeg本体にffmpeg-20110516.diffをあてない場合↓
$ cd gsm-*
$ make
$ install -m 644 lib/libgsm.a /mingw/lib/
$ mkdir -p /mingw/include/gsm/
$ install -m 644 inc/gsm.h /mingw/include/gsm/
※ gsm-makefile.diffはあてなくてOK
/mingw/
↓
/mingw/i686-pc-mingw32/
/mingw/x86_64-w64-mingw32/