アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (5件)

あなたのソースからsockect,bindなどのプログラムを呼び出しています。

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

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

お礼日時:2005/05/24 13:08

> -lsocket -lnslとはどういう意味なのでしょうか?



-lXXX とは libXXX という名前を持つライブラリをリンクせよ、という意味になります。
    • good
    • 0

ソケットライブラリ関連がリンクできてないですね。


gcc -lsocket -lnsl unix_server.c
と打って下さい。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/05/19 16:45

.oファイルやld(リンカ)でのエラーなので、ソケット関係のライブラリが見つからないということだと思います。


コンパイル時のライブラリの指定を確認・指定してみてください。
    • good
    • 0

main関数内に定義されていないものが出てきたぞ!!


ということですね
undefined ~ の後の'socket'etcがないといっています。

ヘッダファイルは定義してますか?
コンパイル時の環境に問題はありませんか?

見直してみてください。
    • good
    • 0

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