2007年07月21日

libogg、libvorbis、libtheoraのコンパイル&インストール

libogg、libvorbis、libtheoraは、以下の場所にあります。
http://xiph.org/

左の方の、Downloadsから、
http://xiph.org/downloads/
libogg-1.1.4.tar.gz
libvorbis-1.2.3.tar.gz
libtheora-1.0beta3.tar.gz
libtheora-1.1.1.tar.bz2
を、適当なディレクトリに保存します。

(1) libogg
MSYSで、ファイルを保存したディレクトリに移動し、
$ tar xzf libogg-1.1.4.tar.gz
$ cd libogg-1.1.4
$ ./configure --prefix=/mingw
$ make
$ make install


(2) libvorbis
MSYSで、ファイルを保存したディレクトリに移動し、
$ tar xzf libvorbis-1.2.3.tar.gz
$ cd libvorbis-1.2.3

lib/Makefile.inを修正します。
267行目に、-loggを追加
libvorbisfile_la_LIBADD = libvorbis.la -logg


以上の修正が終わったら、
$ ./configure --prefix=/mingw
$ make
$ make install

libvorbisencとlibvorbisfileのインストールの時にエラーでストップしてしまう場合は、もう1回「make install」すればインストーできます。


(3) libtheora
MSYSで、ファイルを保存したディレクトリに移動し、
$ tar xzf libtheora-1.0beta2.tar.gz
$ cd libtheora-1.0beta2


lib/dsp.hを修正します。
22行目をコメントアウト
/*typedef unsigned long int ogg_uint64_t;*/

以上の修正が終わったら、

MSYSで、ファイルを保存したディレクトリに移動し、
$ tar xzf libtheora-1.0beta3.tar.gz
$ cd libtheora-1.0beta3


include/theora/codec.hを修正します。

70行目に以下の1行を追加。
#include <stddef.h>


以上の修正が終わったら、

MSYSで、ファイルを保存したディレクトリに移動し、
$ tar xzf libtheora-1.0beta3.tar.gz
$ cd libtheora-1.0beta3

$ tar xjf libtheora-1.1.1.tar.bz2
$ cd libtheora-1.1.1

そのまま、
$ ./configure --prefix=/mingw
$ make
$ make install

以上で終了です。


【更新履歴】を見る
posted by あべちん at 18:07 | Comment(21) | TrackBack(0) | FFmpeg追加ライブラリ
この記事へのコメント
libtheoraのバージョンが、1.0beta1から1.0beta2になっていたんですけど。
修正お願いします
Posted by あいす at 2007年12月10日 22:56
libtheora-1.0で
./configure --prefix=/mingw
とすると
*** Could not run Ogg test program, checking why...
*** The test program failed to compile or link. See the file config.log for the
*** exact error that occured. This usually means Ogg was incorrectly installed
*** or that you have moved Ogg since it was installed.
configure: error:
となってしまいます。liboggはコンパイル/インストールできているようなのですが、何が悪いのでしょう。初心者的な質問ですみません。
Posted by ken at 2009年03月14日 12:12
こんにちは。はじめまして。

管理人さんではありませんが、コメントしてみます。

liboggのインストール先は/mingwになっていますか?
ls /mingw/include/ogg/
でogg.hなどのファイルが見つかるでしょうか?
また
/mingw/lib/libogg.a
/mingw/lib/libogg.la
はありますか?

liboggのconfigureのときにprefixを指定していない場合、
/usr/local/include/ogg
/usr/local/lib/
にインストールされていると思います。
その場合には、libtheoraのconfigureにその場所を知らせてあげないといけません。
--with-ogg=/usr/local を指定してみるといいかも知れません。

ただ先にビルドしているであろうlibvorbisで問題がなかったのなら、この可能性は低いのかな?
Posted by ケリー at 2009年03月14日 14:43
 ケリーさんどうもありがとうございます。以下の通りです

ls /mingw/include/ogg/
でogg.hなどのファイルが見つかるでしょうか?→見つかります。

/mingw/lib/libogg.a
/mingw/lib/libogg.la
はあります。

ほかに原因があるのでしょうか…。
Posted by ken at 2009年03月14日 20:28
うーん、なんでしょうね。
config.logの末尾のエラーを見れば、原因は分かると思うのですが、、。

ところでpkg-configはお使いになられてますか?
お使いの場合、pkg-config --cflags --libs ogg
は正しく結果を返すでしょうか?
Posted by ケリー at 2009年03月14日 21:26
ケリーさん、ありがとうございます。config.logの末尾は以下のように終わっています。
 pkg-configはコンパイルしようとしたのですが、うまくいきませんでした。なかなか難しいですね。


## confdefs.h. ##
## ----------- ##

#define PACKAGE_NAME "libtheora"
#define PACKAGE_TARNAME "libtheora"
#define PACKAGE_VERSION "1.0"
#define PACKAGE_STRING "libtheora 1.0"
#define PACKAGE_BUGREPORT ""
#define PACKAGE "libtheora"
#define VERSION "1.0"
#define STDC_HEADERS 1
#define HAVE_SYS_TYPES_H 1
#define HAVE_SYS_STAT_H 1
#define HAVE_STDLIB_H 1
#define HAVE_STRING_H 1
#define HAVE_MEMORY_H 1
#define HAVE_STRINGS_H 1
#define HAVE_INTTYPES_H 1
#define HAVE_STDINT_H 1
#define HAVE_UNISTD_H 1
#define USE_ASM
#define OC_X86ASM

configure: exit 1
Posted by ken at 2009年03月15日 10:23
すいません、theoraの場合、config.logの末尾じゃわからないですね。もう少し上の方に詳細があります。「checking for Ogg」という箇所を探して、その周辺2箇所を調べてみてください。

失敗例
configure:21013: checking for Ogg
configure:21058: gcc -o conftest.exe -Wall -Wno-parentheses -O3 -fforce-addr -fomit-frame-pointer -finline-functions -funroll-loops conftest.c -logg >&5
conftest.c:26:21: ogg/ogg.h: No such file or directory
.
skip
.
configure:21140: gcc -o conftest.exe -Wall -Wno-parentheses -O3 -fforce-addr -fomit-frame-pointer -finline-functions -funroll-loops conftest.c -logg >&5
conftest.c:24:21: ogg/ogg.h: No such file or directory
.
.

この場合は、単純にoggのヘッダファイルが見つからないために、エラーがでています。そのチェック用のテストプログラムもログに記録されています。
(conftest.c:24:21: ogg/ogg.h: No such file or directoryより下にあります。)

チェックする箇所はエラーメッセージ(このケースではNo such file or directory)です。

あとpkg-configはglibに依存しているので自力コンパイルは少し大変かもです。
なくてもコンパイルできるので、とりあえず気にしないでください。
Posted by ケリー at 2009年03月15日 12:10
ケリーさん、重ね重ねありがとうございます。

conftest.c:26:21: error: ogg/ogg.h: No such file or directory
configure:21060: $? = 1

とありますので、ヘッダーファイルが見つからないのですね。

ogg以下を探しているようなのですが、これはどうすればよいのでしょう。すみません。MinGWだとか、使い始めて2日目でして…。
Posted by ken at 2009年03月15日 12:32
↑書き忘れました。
ogg.hは私の環境では
ホーム以下
/libogg-1.1.3/include/ogg
にあります。
Posted by ken at 2009年03月15日 12:36
えっと、、
>ls /mingw/include/ogg/
でogg.hなどのファイルが見つかるでしょうか?→見つかります。
>/mingw/lib/libogg.a
>/mingw/lib/libogg.la
>はあります。

と書かれていたようですが、、、。
上記にはないのでしょうか?
あるけれど、正しくインストールされていないのかな?

ホーム以下/libogg-1.1.3/include/ogg
とは
/home/username/libogg-1.1.3/include/ogg
にあるっていうことでしょうか?

もしそうなら、コンパイルはしたけれど、liboggのインストールをし忘れているということはありませんか?
/home/username/libogg-1.1.3でmake installを実行してますか?

もし既にインストールしていても、再度実行してみてください。
その際、インストール先が表示されるはずなので、どこにインストールされているか確認もできますから。
/mingw/以下にインストールされているようなら、libvorbisもlibtheoraも普通に./configureすればOKのはずです。
もし無理なら、./configure --with-ogg=/mingwを試してみるのも一つの手かと思います。
もし/usr/local以下など別の場所にインストールされているなら、./configure --with-ogg=/usr/localといった感じでオプション指定してみてください。
Posted by ケリー at 2009年03月15日 15:39
どうもありがとうございます。
./configure --with-ogg=/mingw
で通りました。ただ、ffmpeg本体のconfigureで問題を起こしております。どうやらlibswscaleがないようで、configureを行うと、知らないオプションだとエラーを返します。
あと、CPUがPhenom IIですが、これはAthlon64で指定してよいものかというのもわかりません。

なんかお恥ずかしい限りです…。
Posted by ken at 2009年03月15日 17:24
--with-ogg=/mingwで通ったのが気にはなりますが、無事ビルドできたようで、よかったです。
ひょっとしたらMSYSとMinGWのインストールで問題か、bashのバージョンの問題かな?

あとlibswscaleの問題は、最近のffmpegのソースでは--enable-swscaleをつけて./configureするとエラーが出るようになりました。
指定をしなくても、自動で検出してくれるようです。
Athlon64の指定はCFLAGSの-mtuneなどの指定だと思いますが、Phenom IIはSSE4aまで対応しているみたいなので、gcc-4.3.3なら、amdfam10またはbarcelonaになるのかな?

詳しくは下記をどうぞ。
http://gcc.gnu.org/onlinedocs/gcc-4.3.3/gcc/i386-and-x86_002d64-Options.html#i386-and-x86_002d64-Options
Posted by ケリー at 2009年03月15日 18:17
最適化オプションについて少しだけ補足

以下はあくまで個人的見解ですがご参考まで。

-marchや-mtuneでご自身のPCにあった最適化を行うと、確かにパフォーマンスがあがる場合が多いです。
ただ新しめのCPUの場合は必ずしもパフォーマンスアップになるとは限りません。
プログラムにもよると思いますが、i686やpentium4などを指定するほうがパフォーマンスが良い場合もあります。(最適化のアプローチ(アルゴリズム)が枯れているから?)

なので、ffmpegのビルドに成功したら、最適化オプションを変更したffmpegを複数用意して、パフォーマンスを計測してみるのもいいかも知れませんよ。
Posted by ケリー at 2009年03月15日 18:40
 どうもありがとうございます。一つ超えると次という感じで問題が出てきます。ffmpegのconfigureで
FAAD test failed.
となります。configure.logをみますと、エラーが出ているあたりは、

conftest.c:2: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'me'
configure:2815: $? = 1
configure: failed program was:
| #ifndef __cplusplus
| choke me
| #endif

となっているようです。
Posted by ken at 2009年03月15日 21:21
うーん、やはり--with-ogg=/mingwを指定しないとビルドできなかったことと関係がありそうです。
MSYSがMinGWの場所を分かっていないのかな。
mountコマンドを使って、/mingwはでてくるでしょうか?
mountを実行すると、
c:\mingw on /mingw type user (binmode)
といった感じで表示されると思います。

それとgccのバージョンはなんでしょうか?gcc --versionで表示されます。

とりあえず、いえるのはoggのヘッダが見つからなかったことも考えると、MSYSのインストールでMinGWの場所を知らせなかったとか、gcc-4.3系を追加してインストールしたと思うのですが、その関連かなぁとか、、推測でしかありませんが。

とりあえずの試せる回避策はthoeraの時と同じで、ヘッダやライブラリの場所をconfigureに教えてあげることです。指定方法は
./configure --extra-cflags="-I/mingw/include" --extra-ldflags="-L/mingw/lib"
といった形でしょうか。

--extra-cflagsなどのオプションがないconfigureの場合は、
CPPFLAGS=-I/mingw/include LDFLAGS=-L/mingw/lib ./configure
といった形で指定できる場合が多いです。(CPPFLAGSではなくCFLAGSの場合もあるかも。)
Posted by ケリー at 2009年03月15日 22:06
 どうもありがとうございます。ライブラリの場所を指示することでconfigureは通りました。gccは4.3.0です。正確に言うといくつかlibがないというエラーが出たのですが、makeし直すことで通るようになりました。うろ覚えですが、当初./bootstrapでなんだかのエラーが出ていたのを見落としていて、開発環境の何か(automake?)追加した覚えです。
 それでmakeも出来たのですが、途中でsegmentation faultで落ちました。そもそもエラー表示が日本語で出ているようなのですが文字化けして読めないので、MinGWの環境も何か直さないといけないんだと思います。下のような感じです。

libavcodec/pthread.c:24 、ォ、・include 、オ、・ソ・ユ・。・、・・貭ソスナ include 、ォ、鬢ホハンクタャヘュアラ、ネ、ハ、・ヌ、キ、遉ヲ:
:
C:/msys/1.0/mingw/include/pthread.h:213:5: キルケ・ "HAVE_CONFIG_H" 、マト・チ、オ、・ニ、、、゙、サ、・In file included from libavcodec/pthread.c:24:
C:/msys/1.0/mingw/include/pthread.h:1: internal compiler error: Segmentation fault
エーチエ、ハ・ミ・ーハ&#58028;&#57443;&#57848;&#58759;テ、ニイシ、オ、、。」
ナャタレ、ハ、鬢ミ・ラ・・ラ・チサ・ケク螟ホ・ス。シ・ケ、&#57819;ト、ア、ニ、ッ、タ、オ、、。」
<http://www.mingw.org/bugs.shtml> 、&#57839;ォ、・ミハ&#63729;ヒ。、ャス&#57631;、、ニ、「、熙゙、ケ。」
make: *** [libavcodec/pthread.o] Error 1
Posted by ken at 2009年03月16日 00:09
えっと/mingwはmountはされていましたか?
/etc/fstabの設定も気になります。私の環境では、
c:/mingw /mingw
としています。
この点を気にしているのは、/mingw/includeが
c:/mingw/includeになっているかどうかということなんです。
たとえばc:/mingw/include/oggにヘッダがあるかどうかを確認してみてください。
ひょっとしたらですが、c:/msys/1.0/mingw/include/以下にヘッダやライブラリがあるのではないかと気になっています。

あと日本語のエラー表示の件ですが、個人的には日本語でエラー表示がでた記憶がないのですが、一応こういうこともできるということで、ご参考までに書いてみます。

ターミナルのrxvtは日本語入力は無理ですが、表示はできるようです。C:\msys\1.0\msys.batの中の以下の行
start rxvt -backspacekey  -sl 2500 -fg %FGCOLOR% -bg %BGCOLOR% -sr -fn Courier-12 -tn msys -geometry 80x25 -e /bin/sh --login -i

ここのCourier-12をTerminal-14などに変更してみてください。
msys-1.0ならこれで表示はできると思います。

あとはmsys.batを編集して、rxvtを無効にして、コピー&ペーストなどができなくなりますが、shを利用する形にする方法もあります。
if EXIST rxvt.exe goto startrxvt
の行を
rem if EXIST rxvt.exe goto startrxvt
といった形でコメントアウトします。

あと、~/.profileにエイリアスを設定しておけば、lsコマンドも日本語フォルダなどの表示ができます。
alias ls='ls --show-control-chars --color=auto'
--color=autoはなくてもかまいません。

あとSEGVが発生しているのが気になるところですが、たとえばビルドする際にnice makeとかnice ./configureなど、niceコマンドでプロセスの優先度を下げてみてはいかがでしょうか?
こちらの環境では高負荷時にSEGVする現象が起きる傾向があったので。
ひょっとしたら安定してくれるかも知れません。
Posted by ケリー at 2009年03月16日 00:44
 ケリーさんありがとうございます。

/etc/fstab
には
c:mingw /mingw
とあるのですが、おっしゃるとおり各種ヘッダファイルなどは
c:/msys/1.0/mingw/include/
に存在します。fstabは自分では編集したこともなく、また自分でmountコマンドを打ったこともありません。fstabにこのようにかかれていても自動ではマウントされないのでしょうか。
 日本語表示については、Terminal-14に変更しました。フォントが変わったことはわかりますが、makeをしたときのエラーメッセージは化けています。日本語ではないのかな…。
 nice makeでも同じ結果となります。
Posted by ken at 2009年03月16日 22:54
うーん、MSYSを再度インストールしなおしたほうがいいかも知れませんね。
/etc/fstabについては、
c:mingw /mingw
ではなく、
c:\mingw /mingw
だと思うのですが、タイプミスかな?
あと、mountコマンドはオプションなしにmountと打ってみてください。
現在、マウントされているフォルダの情報が表示されます。
その中に、/mingwがあるかどうか確認してみるといいと思います。
正常に/mingwがマウントされている状態になったら、
c:/msys/1.0/mingw/以下のフォルダは、c:/mingw以下に移動することになろうかと思います。
Posted by ケリー at 2009年03月17日 01:51
 どうもです。ffmpeg通りましたよ。どうやらご指摘通りmsysの設定がおかしくて、開発環境を全て再インストールの上、makeし直しました。とりあえずathlonの最適化で通りました。最適化についてはいろいろいじってみます。
 何度もありがとうございました。
Posted by ken at 2009年03月17日 22:43
こんばんは。
再インストール、再ビルドとは大変でしたね。
でも無事ビルドできたようで、なによりです^^
Posted by ケリー at 2009年03月17日 23:21
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/10401373
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック