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 /opt/sw/lib/perl5/Fink/Services.pm line 190.
Developer Tools をインストールする必要があります。
もしメッセージが以下のようであれば
make: illegal option -- C
Developer Tools に入っていた GNU 版の make
ユーティリティーを、 BSD 版の make に換えてしまったようです。
パッケージの中には GNU 版の make でのみサポートされている特殊機能に依存しているものも多いので、
/usr/bin/make
が gnumake
のシンボリックリンクであることを確認してください。
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 をインストールする場合、まだこの問題に当たります。
この問題は、 /opt/sw/bin/HEAD
をインストールした場合も起こることが報告されています (Fink のパッケージではありません)。
これは簡単に解決できます: rename /opt/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 /opt/sw/src/root-foo-0.1.2-3/opt/sw/lib/libbar*.dylib \ /opt/sw/src/root-foo-shlibs-0.1.2-3/opt/sw/lib/ mv: cannot stat `/opt/sw/src/root-foo-0.1.2-3/opt/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
Starting with macOS 10.14, it's sometimes not possible to rename /usr/local
. If you get an error when renaming /usr/local
directly, then rename the subdirectories inside it instead:
sudo mv /usr/local/include /usr/local/include.moved sudo mv /usr/local/lib /usr/local/lib.moved
do your build, and then you can put /usr/local/include
and /usr/local/lib
back:
sudo mv /usr/local/include.moved /usr/local/include sudo mv /usr/local/lib.moved /usr/local/lib
質問6.9: パッケージをビルドしようとしたら、 "table of contents" が古いというメッセージが出ました。何をしたらいいですか?
回答: このメッセージは重要なヒントです。 メッセージはこのようなものだと思われます:
ld: table of contents for archive: /opt/sw/lib/libintl.a is out of date; rerun ranlib(1) (can't load from it)
この問題を起こしているライブラリに (root で) ranlib を実行する必要があります。 例えば、この例では:
sudo ranlib /opt/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 `/opt/sw/var/lib/dpkg/status'" というメッセージが出て、何もインストールできません!
回答: これは、クラッシュや回復不可能なエラーなど、何らかの理由で dpkg データベースが壊れたことを意味します。 多くの場合、buildlock 中に発生するので、例えば:
package `fink-buildlock-foo-1.2.3-4': missing version
(もちろん、foo-1.2.3-4
はあなたが見ようとしているパッケージ名)
この問題が発生した場合、superuser で /opt/sw/var/lib/dpkg/status
を編集します。
エラーメッセージにある行の近くにいきます。
fink-buildlock-foo-1.2.3-4
で、 Status
フィールドが、
install ok installed
となっていますが、これを
purge ok not-installed
と書き換えます。
また、これとは異なり、ファイル中にゴミがある場合があります。 この場合は、旧バージョンのデータベースをコピーします:
sudo cp /opt/sw/var/lib/dpkg/status-old /opt/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
をインストールし、フレームワーク内へのシンボリックリンクを作ることが知られています。
もしこのようなものであれば:
/opt/sw/include/pango-1.0/pango/pangoft2.h:52: error: parse error before '*' token /opt/sw/include/pango-1.0/pango/pangoft2.h:57: error: parse error before '*' token /opt/sw/include/pango-1.0/pango/pangoft2.h:61: error: parse error before '*' token /opt/sw/include/pango-1.0/pango/pangoft2.h:86: error: parse error before "pango_ft2_font_get_face" /opt/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 Tutorial と Packaging 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 "/opt/sw/src/root-python24-2.4.1-1/opt/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 /opt/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
してください)