• 締切済み

[C++]VC2008のC++がECLIPSE(GCC)で使えない

VC2008EXPRESSは重いのでECLIPSE(コンパイラはGCC)に乗り換えました。しかしVC2008で作成したプログラムが動きません。 具体的には以下のライブラリを使用しているプログラムなのですがECLIPSEでは認識できないようでエラーになります。 #pragma comment(lib,"ws2_32.lib") このDLLはECLIPSEでは使えないのでしょうか?

みんなの回答

  • katouka09
  • ベストアンサー率50% (130/256)
回答No.2

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

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

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

noname#97178
質問者

補足

動かしたいプログラムはこれです ーーーー #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 正直参りました。プログラマになる夢をあきらめるしかないのでしょうか。いま私は絶望の中にいます。

関連するQ&A