人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Solaris10(SPARC版)でperl-5.9.3をインストールしようとしているのですが、
makeで下記エラーになります。

make: Fatal error: Command failed for target `miniperlmain.o'

エラーの状況をhttp://d.hatena.ne.jp/meichi/20070123にのせました。

すみませんが、解決のご教示をお願いします。

gccは下記を使っています。
root@ns[/usr/local/src]% gcc -v
Using built-in specs.
Target: sparc-sun-solaris2.10
Configured with: ../configure
Thread model: posix
gcc version 4.0.2

miniperlmain.oがトリガーかと思いましたが、私の感覚
ですいませんが、違うみたいです。

よろしくお願いします。

●質問者: meichi
●カテゴリ:コンピュータ
✍キーワード:Command gcc make Make: Model
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● hamster009
●10ポイント

syntax errorということなので、perlの他のバージョンを試してみたら?

solaris10でのコンパイル例が紹介されているものだと確実でしょう。

http://end

◎質問者からの返答

>solaris10でのコンパイル例が紹介されているものだと確実でしょう。

すいませんが、紹介されているのでもだめでした。


2 ● a_b_y
●300ポイント ベストアンサー

あらかじめお断わりしておくと、私も職場にSolaris10の入ったマシンはあるのですが、meichiさんとは環境がだいぶ異なるようで再現しないので、以下の内容の一部は憶測の域を出ません。(/usr/local以下の状況に依存してしまうと、当該環境が手元にない限り限界があります。手元にあればどうとでもなるのですが…)そのため、ここではヒントになることを期待して、いくつか考えられることを書き記します。不明な部分は改めて聞いて頂ければと思います。原因などについても冗長に言及するので長くなることはご了承下さい。


最初に、もし README.solaris に目を通していないなら、きちんと読むべきです。(特に 135〜257行目あたり。)


コンパイルが通らない原因は、コメントにも書いたように、いくつかの設定についてConfigureが失敗しているからです。myconfigの結果で ptrsize= とか lseeksize= とかなっている部分で、本来はここがptrsize=4 などとなっていなくてはいけません。結果として、例えば config.h の 3363 行目が本来

#define PTRSIZE 4 /**/

などとなるべきなのに

#define PTRSIZE /**/

となってしまっているはずで、そのせいで perl.h の 1527 行目

#if (IVSIZE == PTRSIZE) && (UVSIZE == PTRSIZE)

において「== の right operand がないよ」と言われています。そういうのがいくつか積み重なって最終的に op.h でsyntax error になっています。


対処法について、方針は二つ。一つは、アドホックに、Configureが失敗した部分を手動で訂正する方法です。エラーを見れば「PTRSIZEが定義されていないんだろうな。どうせ config.h だろうな。…」ということは想像できるので、もし自分で正しい値を設定できるのであれば、一つずつ自分で修正していけば最終的にコンパイルできるだろうと思います。

ただし、これは強引な手なので勧められたものではないです。(私はたまにソースをいじって強引にコンパイルを通したりもしますが、褒められる方法ではないので。)


次に、Configureに正しく設定してもらう、という方針をとる場合。前提として、Configure実行時の質問には正しく回答した(Return連打でデフォルト値にするとか)と仮定します。そうでないなら、改めてデフォルト値で設定し直してみて下さい。なお、再度設定する際は

% make distclean

した後で改めて最初からやり直すのが安全です。


まず、何故Configureが設定に失敗したのか、原因について書きます。Configureの中身で、ptrsizeを設定している部分を読んでみると、6285行目から

if eval $compile_ok; then

ptrsize=`$run ./try`

echo "Your pointers are $ptrsize bytes long."

else

dflt='4'

echo "(I can't seem to compile the test program. Guessing...)" >&4

rp="What is the size of a pointer (in bytes)?"

. ./myread

ptrsize="$ans"

fi

となっています。ここでは、ポインタのサイズをチェックするためのテストプログラムをコンパイルできたなら(if $compile_ok)その出力に設定し(ptrsize=`$run ./try`)、そうでないならユーザに質問するという処理を行っています。おそらくですが、テストプログラムのコンパイルには成功したものの、実行時エラーが発生したため、ptrsizeが空になってしまったものと思われます。精査したわけではありませんが、ざっと読んだところでは、デフォルトで答えている限りそれ以外の可能性は考えられません。(これはある意味ではConfigureのバグとも言えます。他のバージョンのperlでも同じ処理をしているので、単にバージョンを変えただけでは解決にならず問題が他の部分にあることはソースを見れば一目瞭然です。)こんなことが起こるのは、リンカまわりの設定がうまく行っていないせいだと思います。(それを確認したいがためのコメントのテストだったのですが、結果が予想と違うのが悩み所です。テストの2からを、

% /bin/sh

とした後そのシェルの中でやっても同じ結果になるでしょうか?今手元にSolarisがないので適当なんですが。)


対処法はいくつか考えられるでしょうが、gcc ver.4 に特別こだわりがないのであれば(1)が妥当だろうと思います。

(0) Configureを修正する。上で書いたConfigureの処理はある意味バグです。本来

if eval $compile_ok; then

ではなくて

if eval $compile_ok && $run ./try > /dev/null; then

とでもするべき所です。Configureを読んでみると、正しい処理をしている部分とそうでない部分があって、何でこんな凡ミスをしているのか謎です。(きちんとセットアップされたシステムであれば問題にならないので、あまり気にしていないのかもしれません。)不適切な部分を全て修正すればうまく行くでしょう。

(1) 自分で入れた gcc を使わない。「gccでもいけるはず」ですが、私は /usr/local 以下に入っている gcc ver.4 の設定に関して微妙にうまく行っていない可能性を疑っています。(個人的にそうでないと納得できない部分があるのでそう思っているだけですが。)一旦PATHから/usr/local/binを外して、システムのデフォルト環境でやってみてはどうでしょうか。

(2) /usr/local/bin/gcc を使う場合。可能性としてはリンカまわりの処理がうまく行っていないと思われるので、その辺をもう一度確認です。今のところとりあえずは、 README.solaris に書いてあるオプションなどを試してみて下さい、としか言いようがないです。


最後に、話の腰を折りますが、元から入ってるperlじゃいけませんか?

http://www.fukuoka-edu.ac.jp/~kanamitu/install/sol10/

◎質問者からの返答

ありがとうございます。親切な回答をありがとうございます。それにしてもa_b_yさんは大変詳しいんですね。(脱帽)

>コンパイルが通らない原因は、コメントにも書いたように、いくつかの設定についてConfigureが失敗しているからです

私も失敗しているだろうなあ。と素人の感覚で思ってました。

>自分で入れた gcc を使わない

この方法でやってみようと思います。CompanionCDもインストールしているのでデフォルトのgccがあると思うので、使ってみます。

>元から入ってるperlじゃいけませんか?

でもいいのですが、どうしてもできないときはパッケージのperlをいれてみます。

大変詳しく、親切な説明をありがとうございました。

これで終わります。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ