• ベストアンサー

コンパイル時のエラー

UNIXでサーバー、クライアントのCプログラミングをテキストどおりに書いてコンパイルしたのですが、以下のエラーが出ます。gcc, ccでコンパイルすると以下のようになるのですが、これはどういうことなのでしょうか?何が原因なのでしょうか?よろしくお願いいたします。 gcc unix_server.c /var/tmp/ccvpay1f1.o: In function `main': /var/tmp/ccvpay1f1.o(.text+0x8c): undefined reference to `socket' /var/tmp/ccvpay1f1.o(.text+0x104): undefined reference to `unllnk' /var/tmp/ccvpay1f1.o(.text+0x118): undefined reference to `bind' /var/tmp/ccvpay1f1.o(.text+0x150): undefined reference to `listen' /var/tmp/ccvpay1f1.o(.text+0x1a8): undefined reference to `accept' cc unix_server.c ld: /usr/lib/cmplrs/cc/crtn.o: Error: Unresolved: rindex socket bzero bcopy unllnk bind listen accept

質問者が選んだベストアンサー

  • ベストアンサー
  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.5

あなたのソースからsockect,bindなどのプログラムを呼び出しています。これらはソケットライブラリと呼ばれるもので、これを使用するときには、 このライブラリを明示的にリンクする必要があります。 そのために、-l socket の指定を行います。 そうすると libsocketというライブラリをリンクしてくれます。また libsocket自体が、libnslを呼び出している為に、-l nslの指定も行う必要があります。 一般的には #4の方が言われているように -l XXX は libXXXを明示的にリンクすることを示します。 TCP/IP等でソケットライブラリを使用する場合(=今回のような場合)は、必ず -lsocket -lnsl を指定する必要があると覚えておいて下さい。

limona
質問者

お礼

詳しいご説明ありがとうございました。

その他の回答 (4)

回答No.4

> -lsocket -lnslとはどういう意味なのでしょうか? -lXXX とは libXXX という名前を持つライブラリをリンクせよ、という意味になります。

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.3

ソケットライブラリ関連がリンクできてないですね。 gcc -lsocket -lnsl unix_server.c と打って下さい。

limona
質問者

お礼

回答ありがとうございます。そのとおりに打つと解消できました。-lsocket -lnslとはどういう意味なのでしょうか?

  • gatyan
  • ベストアンサー率41% (160/385)
回答No.2

.oファイルやld(リンカ)でのエラーなので、ソケット関係のライブラリが見つからないということだと思います。。 コンパイル時のライブラリの指定を確認・指定してみてください。

  • hel-cat
  • ベストアンサー率35% (30/85)
回答No.1

main関数内に定義されていないものが出てきたぞ!! ということですね undefined ~ の後の'socket'etcがないといっています。 ヘッダファイルは定義してますか? コンパイル時の環境に問題はありませんか? 見直してみてください。

関連するQ&A