dポイントプレゼントキャンペーン実施中!

現在、solaris9でWebAlizerというツールをインストールしようとしています。しかし、make時に以下のようなエラーが出てしまいます。どのように、対応したらよいでしょうか?

# make
gcc -Wall -O2 -DETCDIR=\"/etc\" -DHAVE_MATH_H=1 -c webalizer.c
gcc -Wall -O2 -DETCDIR=\"/etc\" -DHAVE_MATH_H=1 -c hashtab.c
gcc -Wall -O2 -DETCDIR=\"/etc\" -DHAVE_MATH_H=1 -c linklist.c
gcc -Wall -O2 -DETCDIR=\"/etc\" -DHAVE_MATH_H=1 -c preserve.c
gcc -Wall -O2 -DETCDIR=\"/etc\" -DHAVE_MATH_H=1 -c dns_resolv.c
gcc -Wall -O2 -DETCDIR=\"/etc\" -DHAVE_MATH_H=1 -c parser.c
gcc -Wall -O2 -DETCDIR=\"/etc\" -DHAVE_MATH_H=1 -c output.c
gcc -Wall -O2 -DETCDIR=\"/etc\" -DHAVE_MATH_H=1 -I/usr/local/include -c graphs.c
gcc -L/usr/local/lib -o webalizer webalizer.o hashtab.o linklist.o preserve.o parser.o output.o
dns_resolv.o graphs.o -lgd -lpng -lz -lm
未定義の 最初に参照している
シンボル ファイル
libiconv_close /usr/local/lib/libgd.so
libiconv_open /usr/local/lib/libgd.so
libiconv /usr/local/lib/libgd.so
ld: 重大なエラー: シンボル参照エラー。webalizer に書き込まれる出力はありません。
collect2: ld returned 1 exit status
make: *** [webalizer] Error 1

環境は、Solaris9、gcc3.4.2です。

よろしくお願いいたします。

A 回答 (6件)

No.2 の方とほぼ同じ回答なのですが、


Makefileの以下の項目に'-liconv'を付け加えるか、
  CFLAGS = -liconv
  LDFLAGS = -liconv
configure する前に、環境変数
  CFLAGS と LDFLAGS

  '-liconv'
を設定してみてはいかがでしょうか。
    • good
    • 0

-lgd で指定しているGDライブラリが無いんじゃないですか?

    • good
    • 0

すみません、訂正です。


>またSolaris純正のiconv(),iconv_open(),iconv_close()はlibcに含まれます。
と書きましたが、問題となっているのは
libiconv(),libiconv_close()、libiconv_open()でした。
よって「-lc をリンクオプションに追加してみるか」と言うのは間違いです。
    • good
    • 0

libgd.soはSolaris標準のライブラリではありませんので後からユーザによって導入したモノだと思われます。


またSolaris純正のiconv(),iconv_open(),iconv_close()はlibcに含まれます。

-lc をリンクオプションに追加してみるか、
GNU版のlibiconvを/usr/local/lib あたりに放り込んで-liconvすると吉かもしれません。
    • good
    • 0

Makefileを編集し、CFLAGSの項目に


-lconv
を付け加えてみてください。

1の方の指摘通り、リンカのエラーですが、足らないのは
libgd.soではなく、libgd.soが呼んでいるlibiconv_openなどのシンボルです。
これらのシンボルは普通libconv.soで定義されているので、このファイルがインストールされていなければ、探してください。
でも、たぶんインストールされていると思います。

この回答への補足

ご回答ありがとうございました。

早速、-lconvを付加してmakeを行ったのですが、以下のような結果となりました。

# make
gcc -Wall -O2 -lconv -DETCDIR=\"/etc\" -DHAVE_MATH_H=1 -c webalizer.c
gcc: -lconv: linker input file unused because linking not done
gcc -Wall -O2 -lconv -DETCDIR=\"/etc\" -DHAVE_MATH_H=1 -c hashtab.c
gcc: -lconv: linker input file unused because linking not done
gcc -Wall -O2 -lconv -DETCDIR=\"/etc\" -DHAVE_MATH_H=1 -c linklist.c
gcc: -lconv: linker input file unused because linking not done
gcc -Wall -O2 -lconv -DETCDIR=\"/etc\" -DHAVE_MATH_H=1 -c preserve.c
gcc: -lconv: linker input file unused because linking not done
gcc -Wall -O2 -lconv -DETCDIR=\"/etc\" -DHAVE_MATH_H=1 -c dns_resolv.c
gcc: -lconv: linker input file unused because linking not done
gcc -Wall -O2 -lconv -DETCDIR=\"/etc\" -DHAVE_MATH_H=1 -c parser.c
gcc: -lconv: linker input file unused because linking not done
gcc -Wall -O2 -lconv -DETCDIR=\"/etc\" -DHAVE_MATH_H=1 -c output.c
gcc: -lconv: linker input file unused because linking not done
gcc -Wall -O2 -lconv -DETCDIR=\"/etc\" -DHAVE_MATH_H=1 -I/usr/local/include -c graphs.c
gcc: -lconv: linker input file unused because linking not done
gcc -L/usr/local/lib -o webalizer webalizer.o hashtab.o linklist.o preserve.o parser.o output.o
dns_resolv.o graphs.o -lgd -lpng -lz -lm
未定義の 最初に参照している
シンボル ファイル
libiconv_close /usr/local/lib/libgd.so
libiconv_open /usr/local/lib/libgd.so
libiconv /usr/local/lib/libgd.so
ld: 重大なエラー: シンボル参照エラー。webalizer に書き込まれる出力はありません。
collect2: ld returned 1 exit status
make: *** [webalizer] Error 1

なお、libiconv.soファイルはインストールされていました。

引き続き、アドバイスいただけると幸いです。よろしくお願いいたします。

補足日時:2005/12/15 13:09
    • good
    • 0

 Solarisにはあまり詳しくないのだが、ldというのはリンカなので、ライブラリが見つからないのではないだろうか。


 libgd.soというファイルを探すべし。あれば、そいつを/usr/local/libにコピーするかシンボリックリンクをはれば良い。無ければどこかからか探してきてください。

 今はconfigure、makeで一発インストールできるものが多いが、せめて原理は一通り押さえておきたい。
configure:簡単に言うとMakefileを作る
make:Makefileを元にコンパイルやリンク、ファイルの移動・削除を行う
gcc:Cコンパイラ、C言語のプログラムを中間コードに変換する
ld:リンカ、各種中間コードを一つにまとめて、実行ファイルを作成する

この回答への補足

早速のご回答ありがとうございます。

findで調べてみたのですが、すでに、/usr/local/lib配下に、libgd.soは含まれているようです。

困りました・・・。

補足日時:2005/12/15 11:30
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!