Fink

F.A.Q. - 6. コンパイルの問題 - 一般

質問6.1: configure スクリプトが "acceptable cc" が見つからないといってきます。 これは何ですか?

回答: ドキュメンテーションを読んでください。 パッケージをソースからコンパイルするには、 Developer Tools が必要です。 これには、 C コンパイラ cc など必要なものが入っています。

質問6.2: "fink selfupdate-cvs" をしようとしたら、このメッセージが出てきました: "cvs: Command not found."

回答: Developer Tools をインストールする必要があります。

質問6.3: make に関連したエラーがでました。

回答: もしメッセージが以下のようであれば

make: command not found

あるいは

Can't exec "make": No such file or directory at /sw/lib/perl5/Fink/Services.pm line 190.

Developer Tools をインストールする必要があります。

もしメッセージが以下のようであれば

make: illegal option -- C

Developer Tools に入っていた GNU 版の make ユーティリティーを、 BSD 版の make に換えてしまったようです。 パッケージの中には GNU 版の make でのみサポートされている特殊機能に依存しているものも多いので、 /usr/bin/makegnumake のシンボリックリンクであることを確認してください。 bsdmake ではありません。 さらに、 /usr/local/bin/ に他の make がないことも確認してください。

質問6.4: head コマンドから変な使用方法メッセージが出ています。何がおかしいのですか?

回答: もしこれでしたら:

Unknown option: 1
Usage: head [-options] <url>...

(後にオプションの説明リストが続く) head が壊れています。 これは Perl libwww ライブラリを HFS+ システムボリュームにインストールすると起こります。 この時 /usr/bin/HEAD をインストールしようとするのですが、このファイルシステムは大文字と小文字を区別しないので、 head を上書きしてしまいます。 head の方はシェルスクリプトや Makefile で良く使われる標準的なコマンドです。 Fink を使うには、オリジナルの方の head に戻す必要があります。

ソースリリースのブートストラップスクリプトは、現在はこれを確認しますが、最初のインストールにバイナリリリースを使う場合、あるいは Fink をインストールした後で libwww をインストールする場合、まだこの問題に当たります。

この問題は、 /sw/bin/HEAD をインストールした場合も起こることが報告されています (Fink のパッケージではありません)。 これは簡単に解決できます: rename /sw/bin/HEAD

質問6.5: あるパッケージをインストールしようとすると、他のパッケージのファイルを上書きしようとしているというエラーメッセージが出ました。

回答: これはスプリットオフパッケージ (-dev, -shlibs などがついてるもの) において、ファイルが移動する時 (foo から foo-shlibs など) に発生することがあります。 両者は実質同じものなので、インストールしようとしているパッケージから上書きしてしまっても良いでしょう:

sudo dpkg -i --force-overwrite filename

ここで filename はインストールしようとしているパッケージ用の .deb ファイルです。

質問6.6: パッケージをインストールしようとした時の "execution of mv failed, exit code 1" とはどういう意味ですか?

回答: StuffIt Pro がインストールされている場合、 "Archive Via Real Name" モードが設定されていると思われます。 システム環境設定の StuffIt 設定で "ArchiveViaRealName" を無効化してください。 これはいくつかの重要なシステムコールのバ再実装のバグで、この件のような不思議なエラーをたくさん出します。

この問題でない場合、 mv のエラーは通常、ビルドの前の方で発生した別のエラーを意味しています。 エラーは発生したもののビルドは続行したものです。 問題のあったファイルを追跡するには、ビルドの出力中の存在しないファイルを探します。 例えば:

mv /sw/src/root-foo-0.1.2-3/sw/lib/libbar*.dylib \
/sw/src/root-foo-shlibs-0.1.2-3/sw/lib/
mv: cannot stat `/sw/src/root-foo-0.1.2-3/sw/lib/libbar*.dylib':
No such file or directory
### execution of mv failed, exit code 1
Failed: installing foo-0.1.2-3 failed

この場合、 libbar ファイルをビルド出力の前の方で探します。

質問6.7: '"node" already exists' というエラーメッセージが出て、インストール | アップデートができません。

回答: このようなエラーが出ます:

Failed: Internal error: node for system-xfree86 already exists

パッケージ info ファイルが変更されて依存性エンジンが混乱しているために出た問題です。 修正するには:

  • 問題のあるパッケージを強制削除する。上の例の場合は:

    sudo dpkg -r --force-all system-xfree86
  • 再びインストール | アップグレードする。 途中、削除したパッケージの "virtual dependency" のプロンプトが出てくるので、これを選択する。 こうするとビルド中に再インストールされる。

質問6.8: /usr/local にインストールされているライブラリやヘッダが Fink のビルドの問題を起こすことがあると聞いたけど、本当ですか?

回答: そういう場合もよくあります。 これは、パッケージの configure スクリプトは Fink のパスより先に /usr/local の中のライブラリとヘッダを検索するからです。 もし問題が発生して、他の FAQ で解決ができそうになければ、 /usr/local/lib のライブラリと /usr/local/include のヘッダを確認してください。 これが原因そうであれば、 /usr/local の名前を一時的に変えてください。 例えば:

sudo mv /usr/local /usr/local.moved

ビルド後、 /usr/local を元に戻しください:

sudo mv /usr/local.moved /usr/local

質問6.9: パッケージをビルドしようとしたら、 "table of contents" が古いというメッセージが出ました。何をしたらいいですか?

回答: このメッセージは重要なヒントです。 メッセージはこのようなものだと思われます:

ld: table of contents for archive: /sw/lib/libintl.a is out of date; 
rerun ranlib(1) (can't load from it)

この問題を起こしているライブラリに (root で) ranlib を実行する必要があります。 例えば、この例では:

sudo ranlib /sw/lib/libintl.a

質問6.10: atlas をインストールしようとすると、 Fink Commander がハングアップします。

回答: atlas のビルド中にユーザーにプロンプトを送るステップがあり Fink Commander がこれを表示しないからです。 代わりに fink install atlas とする必要があります。

質問6.11: stddef.h | wchar.h | stdlib.h | crt1.o が見つからない、 あるいは、"C compiler cannot create executables" というメッセージが出ます。 これはどこにありますか?

回答: これらの問題は、いずれも Developer Tools の DevSDK によって提供されるヘッダファイルがないためです。 /Library/Receipts/DevSDK.pkg がシステムにあるか確認し、なければ Dev Tools インストーラを起動してカスタムインストールを選択、 DevSDK パッケージをインストールして下さい。

"cannot create executables" エラーは、Developer Tools のバージョンが 以前のバージョンの OS 用である場合にも発生します。

質問6.12: Fink が "unable to resolve version conflict on multiple dependencies" と言って、アップデートできません。

回答: この問題を解決するには、パッケージを一つだけアップデートしてみてください。 次に、再度 "fink update-all" を試してみてください。 まだ問題が出るようなら、これを繰り返してください。

質問6.13: "dpkg: parse error, in file `/sw/var/lib/dpkg/status'" というメッセージが出て、何もインストールできません!

回答: これは、クラッシュや回復不可能なエラーなど、何らかの理由で dpkg データベースが壊れたことを意味します。 多くの場合、buildlock 中に発生するので、例えば:

package `fink-buildlock-foo-1.2.3-4':  missing version

(もちろん、foo-1.2.3-4 はあなたが見ようとしているパッケージ名)

この問題が発生した場合、superuser で /sw/var/lib/dpkg/status を編集します。 エラーメッセージにある行の近くにいきます。 fink-buildlock-foo-1.2.3-4 で、 Status フィールドが、

install ok installed

となっていますが、これを

purge ok not-installed

と書き換えます。

また、これとは異なり、ファイル中にゴミがある場合があります。 この場合は、旧バージョンのデータベースをコピーします:

sudo cp /sw/var/lib/dpkg/status-old /sw/var/lib/dpkg/status

問題が起きる前にインストールしていたパッケージをいくつか再インストールする必要があるかもしれません。

質問6.14: freetype に関係したエラーが出ます。

回答: freetype に関係したエラーにはいくつかありますが、以下のものであれば:

/usr/bin/ld: can't locate file for: -lfreetype

外来の freetype-config があるかどうか、以下のコマンドを実行して確認します。

where freetype-config

(tcsh の場合)

type -a freetype-config

(bash の場合)。 Mono フレームワークは、 /usr/bin/freetype-config をインストールし、フレームワーク内へのシンボリックリンクを作ることが知られています。

もしこのようなものであれば:

/sw/include/pango-1.0/pango/pangoft2.h:52: error: parse error before '*' token 
/sw/include/pango-1.0/pango/pangoft2.h:57: error: parse error before '*' token 
/sw/include/pango-1.0/pango/pangoft2.h:61: error: parse error before '*' token 
/sw/include/pango-1.0/pango/pangoft2.h:86: error: parse error before "pango_ft2_font_get_face"
/sw/include/pango-1.0/pango/pangoft2.h:86: warning: data definition has no type or storage class 
make[2]: *** [rsvg-gz.lo] Error 1 
make[1]: *** [all-recursive] Error 1 
make: *** [all-recursive-am] Error 2 
### execution of make failed, exit code 2 
Failed: compiling librsvg2-2.4.0-3 failed

あるいは

In file included from vteft2.c:32: 
vteglyph.h:64: error: parse error before "FT_Library"
vteglyph.h:64: warning: no semicolon at end of struct or union 
vteft2.c: In function `_vte_ft2_get_text_width': 
vteft2.c:236: error: dereferencing pointer to incomplete type 
vteft2.c: In function `_vte_ft2_get_text_height': 
vteft2.c:244: error: dereferencing pointer to incomplete type 
vteft2.c: In function `_vte_ft2_get_text_ascent': 
vteft2.c:252: error: dereferencing pointer to incomplete type 
vteft2.c: In function `_vte_ft2_draw_text': 
vteft2.c:294: error: dereferencing pointer to incomplete type 
vteft2.c:295: error: dereferencing pointer to incomplete type 
make[2]: *** [vteft2.lo] Error 1 
make[1]: *** [all-recursive] Error 1 
make: *** [all] Error 2 
### execution of make failed, exit code 2 
Failed: compiling vte-0.11.10-3 failed

あるいは

checking for freetype-config... /usr/X11R6/bin/freetype-config 
checking For sufficiently new FreeType (at least 2.0.1)... no 
configure: error: pangoxft Pango backend found but did not find freetype libraries 
make: *** No targets specified and no makefile found.  Stop. 
### execution of LD_TWOLEVEL_NAMESPACE=1 failed, exit code 2 
Failed: compiling gtk+2-2.2.4-2 failed

問題は X11 | XFree86 に含まれている、 freetype | freetype-hinting パッケージ間のヘッダを混同していることだと思われます。

fink remove freetype freetype-hinting

で、両方のインストールを削除します。 もし問題が上記のようではなく、以下のようであれば:

ld: Undefined symbols: 
_FT_Access_Frame 

おそらく X11 インストールの残りファイルが原因です。 X11 SDK を再インストールしてみて下さい。

質問6.15: `Dl_info' のエラーが出ます。

回答: エラーが下記のようであれば:

unix_dl.c: In function `rep_open_dl_library': 
unix_dl.c:328: warning: assignment discards qualifiers from pointer target type 
unix_dl.c: In function `rep_find_c_symbol': 
unix_dl.c:466: error: `Dl_info' undeclared (first use in this function) 
unix_dl.c:466: error: (Each undeclared identifier is reported only once 
unix_dl.c:466: error: for each function it appears in.) 
unix_dl.c:466: error: parse error before "info"
unix_dl.c:467: error: `info' undeclared (first use in this function) 
make[1]: *** [unix_dl.lo] Error 1

おそらくヘッダファイル /usr/local/include/dlfcn.h が Panther と非互換だと思われます。 迷うことなく削除して下さい。

このファイルは通常、 Open Office によってインストールされるようです。 この後、次のヘッダファイルとライブラリ /usr/local/lib/libdl.dylib を Panther に付随するファイルへのシンボリックリンクに変更します。

sudo ln -s /usr/include/dlfcn.h /usr/local/include/dlfcn.h 
sudo ln -s /usr/lib/libdl.dylib /usr/local/lib/libdl.dylib

質問6.16: Fink が gcc2 がないと言っていますが、インストールも出来ないようです。

回答: gcc2 は gcc-2.95 のバーチャルパッケージです。 gcc2.95 を XCode Tools (古い OS バージョンは Developer Tools に gcc-2.95 が含まれていました) からインストールして下さい。

注記: gcc2.95 and/or gcc3.1 は gcc3.3 とコンフリクトしません。両方インストールすることもできます。

質問6.17: Fink が Failed: Can't resolve dependency "system-java14-dev" と言っていますが、そのようなパッケージはありません。

回答: バーチャルパッケージだからです。 このエラーは、 Java が Software Update によって更新された場合に発生します。 更新時にヘッダファイルが削除され、 -dev パッケージが作成されなくなるためです。

Apple から、適切な Java Developer Tools パッケージをダウンロードする必要があります。 この問題の場合は、 Java 1.4.2 Developer Tools です。

質問6.18: 何をインストールしようとしても、 dpkg (subprocess): failed to exec dpkg-split to see if it's part of a multiparter: No such file or directory というエラーが出ます。 どうしたらいいですか?

回答: 通常、環境変数を正しく設定することで直ります。 参照: この FAQ 項目

質問6.19: 次のメッセージが出ます:configure: error: XML::Parser perl module is required for intltool。 どうしたら良いでしょうか?

回答: 自分のシステムにある Perl に合った、正しいバージョンの xml-parser-pm が必要です。 例えば、 Panther では xml-parser-pm581 が正しく、 xml-parser-pm560 ではありません ( xml-parser-pm 代替パッケージでも可)。 システムにあるのが、 Perl-5.8.1 であり、 Perl-5.6.0 ではないためです。 Jaguar でデフォルトのシステム Perl バージョンを使っている場合、 pm560 で、 Perl 5.8.0 をインストールしている場合は pm580 でも構いません。

質問6.20: パッケージをダウンロードしようとすると、 Fink が変なサイトに行こうとするけれど、 distfiles と書いてあるだけで、しかもそのファイルはそこに存在しません。

回答: これは、 Fink が マスター と呼ばれるものを使おうとしたために発生しています。 上流サイトが移動しても Fink パッケージのソースが入手できるための仕組みです。 この問題は、新しい上流バージョンのパッケージがリリースされたが、 まだ Master ミラーに反映されていない場合によくおこります。

これを直すには、 fink configure を実行し、マスターミラーを最後に検索するように設定を変更します。

質問6.21: パッケージをビルドするときに、 Fink に違うオプションを使わせたい。

回答: まず最初に、バリエーションを作成するようにパッケージメンテナに伝えてみてください。 これが比較的簡単な方法です。 メンテナから反応がなかったり、新しいバージョンが出てしまったり、自分で違うオプションを試してみたい場合、 Packaging TutorialPackaging Manual をお読みください。

注記:Fink は、ビルドされたマシンに依存しないよう、全ての公式パッケージにはG5 最適化などのことはされません。このようなことをしたい場合、各自でする必要があります。

質問6.22: ソースからビルドしようとすると必ず、同じライブラリの二つのバージョンをいったりきたりします。

回答: 非常に複雑なビルドツリーでは、いくつかのパッケージがライブラリの特定バージョンに依存しており、 他のパッケージが他のバージョンに依存していることがあります (例 db47 vs. db44)。 結果、Fink は更新しようとしているパッケージの依存性を満たすためにインストールされていない方をインストールしようとします。

Unfortunately, due to limitations in the build-dependency engine, you may wind up with the dreaded 残念ながら、ビルド依存エンジンの限界により、恐怖の

Fink::SysState: Could not resolve inconsistent dependencies

というメッセージを、十分複雑な update-all をした場合に見ることができます。 これは通常、以下のコマンドで直ります:

fink scanpackages
sudo apt-get update
sudo apt-get install foo=1.23-4	
      

しかし、十分複雑な更新の場合には聞きません。 いくつかのパッケージを一つ一つ更新してみてください。

質問6.23: Python モジュールをビルドする際に、MACOSX_DEPLOYMENT_TARGET の問題が出ます。

回答: 以下のようであれば:

running build
running build_ext
Traceback (most recent call last):
  File "setup_socket_ssl.py", line 21, in ?
    depends = ['socketmodule.h'] )
  File "/sw/src/root-python24-2.4.1-1/sw/lib/python2.4/distutils/core.py", line 166, in setup
SystemExit: error: $MACOSX_DEPLOYMENT_TARGET mismatch: now "10.4" but "10.3" during configure
### execution of /sw/bin/python2.4 failed, exit code 1

python2* パッケージは、ビルド時に MACOSX_DEPLOYMENT_TARGET をある設定ファイルに書き、Python ビルドユーティリティはモジュールをコンパイルする際に この値を使っています。 これは、10.3 上でビルドした python24 を 10.4 上で使う場合、 つまり 10.3 => 10.4 とアップグレードしたり、 10.4-transitional バイナリディストリビューションを使ってビルドせずに更新した場合、 Python は、実際は 10.4 のところ MACOSX_DEPLOYMENT_TARGET の 値が 10.3 だと思い込むミスマッチが発生します。

上記の問題の場合であれば、fink rebuild python24 を実行し、 python パッケージを更新すれば修正されます。

質問6.24: unrecognized option `-dynamic' というエラーが libtool から出たとです。

回答: このエラー:

 libtool: unrecognized option `-dynamic'

は、Apple の /usr/bin/libtool を GNU の libtool に変えてしまったことを意味します。 残念ながら、この二つの libtools は、同じことをしてくれません

これを直す唯一の方法は、ちゃんとした Apple libtool をどこから手に入れることです。 これは、 XCode Tools の DeveloperTools.pkg パッケージの一部で、 /Library/Receipts のレシートを削除した後、再インストールすることができます。 (10.4以降ならゴミ箱へ、10.3ならsudo rm -rf /Library/Receipts/DeveloperTools.pkgしてください)

次: 7. コンパイルの問題 - 特定のバージョン