重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【終了しました】教えて!goo新規会員登録

VC2008EXPRESSは重いのでECLIPSE(コンパイラはGCC)に乗り換えました。しかしVC2008で作成したプログラムが動きません。

具体的には以下のライブラリを使用しているプログラムなのですがECLIPSEでは認識できないようでエラーになります。
#pragma comment(lib,"ws2_32.lib")

このDLLはECLIPSEでは使えないのでしょうか?

A 回答 (2件)

gethostname関数の引数の型が異なっているようですが、確認していますか?


コンパイラが出力したエラーメッセージをよく確認しましょう。
#pragma comment(lib,"ws2_32.lib")
がgccで使えるかは、マニュアルやgccの参考書等で確認してみてください。
    • good
    • 0

まず質問の書き方から:


「認識できない」という表現はときにより非常にあいまいな使い方をされることがあります. あなたはこの言葉で何を言わんとしているのでしょうか. また, 「エラーになる」というのであればおそらくエラーメッセージが出ていることでしょうから, そのメッセージを書くようにしてください. エラーメッセージの内容が完全に理解できているのでない限り, 勝手に「このような」などと解釈するのではなくメッセージを一字一句そのまま書くようにしてください.
さておき, プラグマの書式は処理系に依存するので, 「あるプラグマは処理系A では使えるけど処理系B では使えない」ということはあり得ます. そして, 処理系では「自分が理解できないプラグマは何も言わず無視」です.
ということで, そのプラグマが VC2008Express では使えるけど gcc では使えなくって, 結果としてそのプラグマに対して VC2008Express が提供している機能が使えなくなっているだけではないでしょうか? そのプラグマにより VC2008Express が行う処理を gcc でも与えてやればいいと思います.

この回答への補足

動かしたいプログラムはこれです
ーーーー
#include <iostream>
#include <ws2tcpip.h>
#pragma comment(lib,"ws2_32.lib")

using namespace std;

int main() {
int dstSocket;
struct sockaddr_in dstAddr;
WSADATA data;
WSAStartup(MAKEWORD(2,0), &data);

// sockaddr_in 構造体のセット
memset(&dstAddr, 0, sizeof(dstAddr));
dstAddr.sin_port = htons(80);
dstAddr.sin_family = AF_INET;
dstAddr.sin_addr.s_addr = inet_addr("127.0.0.1");

// ソケットの生成
dstSocket = socket(AF_INET, SOCK_STREAM, 0);

***中略***

// Windows でのソケットの終了
closesocket(dstSocket);
WSACleanup();
return(0);
}
ーーーー

コンパイルするとエラーになる

***
**** Build of configuration Default for project t001 ****

make all
g++ -O2 -g -Wall -fmessage-length=0 -c -o ***.o t001.cpp
In file included from /usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../include/w32api/ws2tcpip.h:19,
from ***.cpp:2:
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../include/w32api/winsock2.h:103:2: warning: #warning "fd_set and associated macros have been defined in sys/types. This may cause runtime problems with W32 sockets"
In file included from /usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../include/w32api/ws2tcpip.h:19,
from ***.cpp:2:
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../include/w32api/winsock2.h:635: error: declaration of C function `int gethostname(char*, int)' conflicts with
/usr/include/sys/unistd.h:206: error: previous declaration `int gethostname(char*, size_t)' here
***.cpp:3: warning: ignoring #pragma comment
***.cpp: In function `int main()':
***.cpp:32: warning: unused variable 'n'
make: *** [***.o] Error 1


正直参りました。プログラマになる夢をあきらめるしかないのでしょうか。いま私は絶望の中にいます。

補足日時:2009/10/08 13:05
    • good
    • 0

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