- ベストアンサー
コンパイル時のエラー
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
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
あなたのソースからsockect,bindなどのプログラムを呼び出しています。これらはソケットライブラリと呼ばれるもので、これを使用するときには、 このライブラリを明示的にリンクする必要があります。 そのために、-l socket の指定を行います。 そうすると libsocketというライブラリをリンクしてくれます。また libsocket自体が、libnslを呼び出している為に、-l nslの指定も行う必要があります。 一般的には #4の方が言われているように -l XXX は libXXXを明示的にリンクすることを示します。 TCP/IP等でソケットライブラリを使用する場合(=今回のような場合)は、必ず -lsocket -lnsl を指定する必要があると覚えておいて下さい。
その他の回答 (4)
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
> -lsocket -lnslとはどういう意味なのでしょうか? -lXXX とは libXXX という名前を持つライブラリをリンクせよ、という意味になります。
- tatsu99
- ベストアンサー率52% (391/751)
ソケットライブラリ関連がリンクできてないですね。 gcc -lsocket -lnsl unix_server.c と打って下さい。
お礼
回答ありがとうございます。そのとおりに打つと解消できました。-lsocket -lnslとはどういう意味なのでしょうか?
- gatyan
- ベストアンサー率41% (160/385)
.oファイルやld(リンカ)でのエラーなので、ソケット関係のライブラリが見つからないということだと思います。。 コンパイル時のライブラリの指定を確認・指定してみてください。
- hel-cat
- ベストアンサー率35% (30/85)
main関数内に定義されていないものが出てきたぞ!! ということですね undefined ~ の後の'socket'etcがないといっています。 ヘッダファイルは定義してますか? コンパイル時の環境に問題はありませんか? 見直してみてください。
お礼
詳しいご説明ありがとうございました。