こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

外部シンボルって

本に載っていた以下のようなサンプルコード
#include <stdio.h>
#include <winsock.h>

void main( void )
{
WSADATA wsadata;

if ( WSAStartup( 0x0101, &wsadata ) != 0 ) {
printf( "WSAStartup の実行に失敗 %d\n", WSAGetLastError());
}

int sock;
struct sockaddr_in addr;
int ret ;
struct hostent *hostinfo;
unsigned long inetaddress;
char *hostname = "localhost";

inetaddress = inet_addr( hostname );
if ( inetaddress == INADDR_NONE ) {
hostinfo = gethostbyname( hostname );
if ( hostinfo == 0 ) {
// ホスト名解決に失敗
return ;
}
inetaddress = *(unsigned long *)hostinfo->h_addr_list[0];
}
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = inetaddress;
addr.sin_port = htons(80);

sock = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );
ret = connect( sock, (struct sockaddr *)&addr, sizeof addr );
if ( ret < 0 ) {
printf( "localhost 80 に接続できなかった" );
return ;
}

char get[] = "GET /index.html HTTP/1.0\r\n\r\n";
send( sock, get, strlen(get), 0 );

char buf[256];
int n;
printf( "recv data\n" );
while ( 1 ) {
n = recv( sock, buf, sizeof(buf)-1, 0 );
if ( n <= 0 ) break;
buf[ n ] = '\0';
printf( buf );
}
closesocket( sock );

WSACleanup();
}
をVC++6.0でコンパイルしたのですが
sample_client_win.obj : error LNK2001: 外部シンボル "_WSACleanup@0" は未解決です
のようなコンパイルエラーが出て実行できません。これはなにが悪いのでしょうか。本に載っているサンプルコードなのでソース自体は間違っていないと思うのですが・・・もしよろしかったらご教授ください。

投稿日時 - 2004-07-09 10:04:14

QNo.920081

暇なときに回答ください

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

Windows Socket ライブラリをリンクしていないのではないかしら。 ws2_32.lib もしくは wsock32.lib だと思われます。

投稿日時 - 2004-07-09 10:49:24

お礼

ありがとうございました。wsock32.libをリンクしてみるとコンパイルがとおり実行できました。

投稿日時 - 2004-07-09 15:09:25

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

WinSock のライブラリ( *.LIB ) か DLL は正しく指定されていますか?

投稿日時 - 2004-07-09 10:46:30

ANo.1

外部シンボルとは、WSACleanup()などの関数がどこに実装されているかということが入っているものです。

wsock32.libを一緒にリンクする必要があるということが本に書かれていませんでしたか?

投稿日時 - 2004-07-09 10:46:29

あなたにオススメの質問