2006年06月03日

mp4boxのビルドに挑戦

【概要】未成功です。あと長いです。

mp4box はgpacというオープンソースのコマンドラインツール群に含まれている。
gpacは、映像やら音声やら字幕やら「シーン記述言語」やらなんやら、AVIに比べればたいへん複雑なmp4コンテナのオーサリングツール。
、、、だと思う。

gpac の公式ページからダウンロードを見るといろいろ書いてある。
最新リリースはGPAC 0.4.0だが、ffmpegX内蔵版は 0.4.1-DEVだ。
手許では既にホームディレクトリに0.4.0のソースコードの入った「gpac」フォルダがあるので(1年近く事放置気味)、これをCVSアップデートし てやればいいわけだ。

CVSアップデート

sourceforgeのCVSページに飛ぶと、こんな風に書いてある。
 cvs -d:pserver:anonymous@gpac.cvs.sourceforge.net:/cvsroot/gpac login 
現在位置がホームフォルダなのを確認して上記のまま入力。
パスワードを聞かれるのでそのままリターン。
 cvs -z3 -d:pserver:anonymous@gpac.cvs.sourceforge.net:/cvsroot/gpac co -P modulename
modulenameと書いてある部分は欲しいものに直せとある。
mp4boxだけ欲しかったのだが、mp4boxもapplications/mp4boxもハネられた。
gpacで通った。
あ、gpac/applications/mp4boxだったのかな?
 cvs -z3 -d:pserver:anonymous@gpac.cvs.sourceforge.net:/cvsroot/gpac co -P gpac
cd ~/gpac で「gpac」フォルダに入り、
chmod a+x ./configure
なぜかgpacのコンフィギュアスクリプトには実行権が付いてないので、コンフィギュアはこれをやってから。
$ ./configure
*** Error: Unrecognised option: '--libs=core'
Use wx-config --help for information on command line options.

** System Configuration
Install prefix: /usr/local
Source path: /Users/USERNAME/gpac
C compiler: cc
make: make
CPU: powerpc
Big Endian: yes

** GPAC 0.4.1-DEV Core Configuration **
debug version: no
GProf enabled: no
Memory tracking enabled: no
read-only version: no
fixed-point version: no
IPV6 Support: no
IsoMedia MovieFragments support: yes
SVG Support disabled: no

** Detected libraries **
zlib: system
OSS Audio: no
X11 Shared Memory support: yes (path: /usr/X11R6)
SDL Support: yes
libXML2: yes
OpenGL support: no
OpenSSL support: yes
wxWidgets support: Version 253

** Extra Libraries used **
SpiderMonkey: no
FreeType: system
JPEG: system
PNG: system
MAD: system
FAAD: system
XVID: system
FFMPEG: no
Xiph OGG: no



Creating config.mak
Done - type 'make help' for make info, 'make' to build
  •  '--libs=core' は./confihure --helpに見当たらなかった(後述)。
  • ピ ンクのものはMPlayerをビルドした時に入れたものが検出されてるのだと思う。素のTigerではnoになるハズだ。
  • ffmpegは/usr/local/bin にMobileHackers版が入っている筈だが、やはり自前でビルドしたものでないと行けないようだ。
とりあえずこのままmakeすると途中でコケる。ldがどうとか言ってるが、今やりたいのはmp4boxだけなので放置。

mp4boxだけmakeする

ソースコードの中にmp4boxというフォルダがあったのでそこに入る。
$ cd /Users/USERNAME/gpac/applications/mp4box/ 
中にあるのは、、、
$ ls
CVS Makefile filedump.c fileimport.c main.c
ここでmakeを実行するとこのMakefileってのを参照してビルドしてくれるらしい。てゆうか、した。
MACNAME:‾/gpac/applications/mp4box USERNAME$ make
cc -O3 -Wno-pointer-sign -no-cpp-precomp -pipe -fomit-frame-pointer -fno-common -fno-strict-aliasing -Wno-pointer-sign -Wall -I/Users/UserName/gpac/include -c -o main.o main.c
cc -O3 -Wno-pointer-sign -no-cpp-precomp -pipe -fomit-frame-pointer -fno-common -fno-strict-aliasing -Wno-pointer-sign -Wall -I/Users/UserName/gpac/include -c -o filedump.o filedump.c
cc -O3 -Wno-pointer-sign -no-cpp-precomp -pipe -fomit-frame-pointer -fno-common -fno-strict-aliasing -Wno-pointer-sign -Wall -I/Users/UserName/gpac/include -c -o fileimport.o fileimport.c
fileimport.c: In function 'package_file':
fileimport.c:1443: warning: 'mtype' may be used uninitialized in this function
cc -Wl,--warn-common -read_only_relocs warning -o ../../bin/gcc/MP4Box main.o filedump.o fileimport.o -L../../bin/gcc -lgpac -lz
/usr/bin/ld: unknown flag: --warn-common
collect2: ld returned 1 exit status
make: *** [MP4Box] Error 1
MACNAME:‾/gpac/applications/mp4box USERNAME$
そしてコケた^^;
ldというのはリンカ関連らしい。
で、--warn-commonというオプションはMacのGCC(手許は4.0.1)には無いと言ってるらしい(後述)。

リンカといっても良く解らないが、ここのところmencoderのビルドが転けていた時にldがエラーを吐いているっぽいのはよく見た。
その時はgifをdisableにする事で直ったが、この場合は./configureスクリプトが無いので何かを除外しようにも手がかりが無い。

MakefileをTextEditで開いてみると、1行目に「include ../../config.mak」とある。なんだかわからないが、gpacフォルダとmp4boxフォルダでそれぞれmake distclean(./configure や前回のmake結果を"ナシ"にするコマンド)をかけてからもう一度、mp4boxフォルダでmake。
MACNAME:~/gpac/applications/mp4box USERNAME$ make
Makefile:1: ../../config.mak: No such file or directory
make: *** No rule to make target `../../config.mak'. Stop.
うーん、make distcleanでconfig.mak も消えてるしなぁ。
MACNAME:~/gpac/applications/mp4box USERNAME$ make -f /Users/USERNAME/gpac/applications/mp4box/Makefile
でも
MACNAME:~/gpac/applications/mp4box USERNAME$ make -f /Users/USERNAME/gpac/applications/mp4box/Makefile mp4box
でも結果同じ。末尾のmp4boxと書いた位置にはターゲットなるものを指定すれと(man makeに)あるので、適当に入れてみただけだけど。
1行目の「include ../../config.mak」冒頭に#をつけると(これでコメントになると思う)、エラーだらけになる。一応ビルドを試みてはいるようだ。


、、、欲しいのがmp4boxだけの場合も、gpac全体のconfigureを一度適切に指定してやる必要がありそうだとここまでやって気付く^^;

gpacの./configure --help

、、、なんか去年のこの時期もこうゆう事やってたような。
MacName:~/gpac USERNAME$ ./configure --help
Usage: configure [options]
Options: [defaults in brackets after descriptions]
デフォルトは説明文の後のブラケット([])内
GPAC configuration options:
--help print this message
--prefix=PREFIX install in PREFIX [/usr/local]
PREFIX で指定した位置にインストールする
--mandir=DIR man documentation in DIR [PREFIX/man]
DIRで指定した位置にmanをインストールする
--source-path=PATH path of source code []
ソースコードのパス
--cross-prefix=PREFIX use PREFIX for compile tools []
PREFIX の位置にあるコンパイルツールを使う
--cc=CC use C compiler CC [gcc]
CCのコンパイラを使う(gcc以外の、例えば今ならインテルのC コンパイラとかだと思う)
--make=MAKE use specified make [make]
指定したmakeコマンドを使う(これも作り付け以外のmakeが ある場合に指定するのだと思う)
--extra-cflags=ECFLAGS  add ECFLAGS to CFLAGS [-fno-strict-aliasing]
<不 明>
--extra-ldflags=ELDFLAGS  add ELDFLAGS to LDFLAGS [ -Wl,--warn-common]
<不明>とりあえずこれを変えてみよう。
--extra-libs=ELIBS add ELIBS []
<不明>
--cpu=CPU force cpu to CPU [Power Macintosh]
特にMac版ソースコードを獲って来た覚えはないが、、、
--sdl-cfg=SDL_PATH specify path to sdl-config for local install []
sdl -configの位置を指定。
(手許ではSDLインストール済みなので自動検出する)
--enable-sdl-static use static SDL linking [default=no]
SDLのスタティックリンク
ダイナミックリンクの反対。バイナリにSDLを取り込むのだと思 う。サイズが大きくなるが、他のマシンに持っていっても動く、、、ハズ。
--X11-path=X11_PATH  specify path for X11 libraries [/usr/X11R6/lib]
x11関連ライブラリの位置指定
--dxsdk-path=DX_PATH specify directX SDK for MinGW []
MinGW (windows上のLinux互換環境)用のdirectX SDKの位置指定。
--mozdir=MOZ_PATH specify mozilla main directory path for system install
なぜここで
mozillaなのか不明だが、Linuxではブラウザのヘ ルパーアプリとして動く動 画再生アプリもMPlayerとかVLCになるので、それに近いものかもしれない。
--enable-debug produce debug version
デバッグ版を生成する
--enable-gprof enable profiling
<不明>
--track-memory enables tracking of all memory allocated by gpac
gpacがアロケートする全メモリのトラッキング
--disable-fragments disable movie fragments in ISO media support
<不明>
--disable-opt disable GCC optimizations
GCCによる最適化を無効に
--disable-ipv6 disable IPV6 support
IPV6 を無効に
--disable-wx disable wxWidgets support
<不明>wxWidgetsを無効に
--disable-oss-audio disable OSS audio
OSS audioを無効に
--disable-x11-shm disable X11 shared memory support
X11 shared memory サポートを無効に
--disable-fragments disable movie fragments in ISO media support
<不明>しかも重複
--enable-readonly force ISO media to be read-only
<不明>ISO media を強制的に read-onlyにする。
--disable-svg disable SVG support
SVGサポートを無効に
--enable-fixed-point enable fixed-point math (THIS MODIFIES GPAC MATH.H HEADER)
<不明>浮動小数点関連?
--force-fixed-point force fixed-point math without changing gpac math.h header
<不明>浮動小数点関連?
--disable-opengl disable OpenGL support
OpenGL サポートを無効に
--disable-ssl disable OpenSSL support
OpenSSL サポートを無効に
--enable-amr-nb-fixed enable AMR NB fixed-point decoder
AMR NB fixed-point デコーダを有効に
AMRってのは携帯電話関連の音声形式だったと思う。
NBは恐らくナローバンド
--enable-amr-nb enable AMR NB library
AMR NB libraryを有効に
--enable-amr-wb enable AMR WB library
AMR WB libraryを有効に
WBは恐らくワイドバンド
--enable-amr enable both AMR NB and WB libraries
AMR NB/WB libraryを有効に
Extra libraries configuration. You can turn a libray off or force using the local version in gpac/extra_lib/
外部ライブラリのコンフィギュレーション。
ライブラリ使用を切ったり、gpac/extra_lib/ 内のローカル版を強制的に使ったりできる。
--use-js=OPT force SpiderMonkey ECMAScript off/local
<不明>SpiderMonkeyはモジラ関連のナニカだったと思う。
手許では自動認識しなかった。
--use-ft=OPT force FreeType OPT=[no,local]
フォント関連のナニカ。字幕とかで使うのだと思う。
手許では自動認識した(systemと出る)。
--use-jpeg=OPT force JPEG OPT=[no,local]
JPEG関連のライブラリ。
手許では自動認識した
(systemと出る)。
--use-png=OPT force PNG OPT=[no,local]
PNG 関連のライブラリ。
手許では自動認識した
(systemと出る)。
--use-faad=OPT force FAAD OPT=[no,local]
aac 音声のデコード専用ライブラリ(エンコード専用はfaac)。
手許では自動認識したが、ビルドした覚えが無い。
MPlayer/MEncoderのソース内にあるのでこれをビルドしたときにできたものだと思う
(system と出る)。
--use-mad=OPT force MAD OPT=[no,local]
MPEG audio decoding library。
手許では自動認識した
(systemと出る)が、これは
MPlayer/MEncoderをビルドしたときに入れた記憶がある
--use-xvid=OPT force XVID OPT=[no,local]
手 許では自動認識した(systemと出る)が、これも
MPlayer/MEncoderをビルドしたときに入れた
--use-ffmpeg=OPT force FFMPEG OPT=[no,local]
手 許では自動認識しなかった(noと出る)。/use/local/binには MobileHackers版バイナリが入っているが、自力でビルドしなきゃいけないようだ。
NOTE: The object files are build at the place where configure is launched
オブジェクトファイルはconfigureが起動した場所に生成さ れる。
これはインストール前に一旦生成されるバイナリの置き場所を指すの だと思う。Finderで見てるとconfigureと同じディレクトリになんかできるから。
んで、
 man ld | col -b > ~/Desktop/man_ld
これでldのmanがデスクトップにTextで出来る。
やはり[ -Wlも--warn-common]も無いようだ。一応似たものとしては、-warn_commonsというのがあった。

-warn_commons (64-bit only)
Causes  the  static  linker to write a diagnostic line about how
common symbols were processed.  This  is    useful    for  debugging
problems with common symbols.

一方-Wlのほうは、他のオプションの説明には出てくるものの、ズバリの説明が見当たらない。

JM Projectldを探す
-warn-common
共通シンボルが他の共通シンボルやシンボル定義と結合 されている場合に警告を発する。 Unix のリンカはこの点には比較的寛容であるが、他の OS のリンカにはそうでないものもある。このオプションはグローバルシンボルを結合することによって生じる問題点を見つける手がかりになるかもしれない。

ここでも-Wlは見当たらないようだ。そもそもldの説明文からしてナゾ。
ld は複数のオブジェクトファイルや書庫 (archive) ファイルを結合し、それらのデータをリロケートして、シンボルの参照をまとめる。新たな実行プログラムをコンパイルして作成する作業の最終ステップは、多 くの場合 ld の呼び出しとなる。

、、、まぁ、最終ステップまでは行ってるのかもしれないという印象を受けた。
って事で本日はこれまで。
posted by ばる at 00:00| Comment(0) | TrackBack(0) | mp4box[ビルド] | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス: [必須入力]

ホームページアドレス: [必須入力]

コメント: [必須入力]

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


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

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

この広告は1年以上新しい記事の投稿がないブログに表示されております。