【问题标题】:cygwin + Windows socket programmingcygwin + Windows 套接字编程
【发布时间】:2011-04-19 16:40:24
【问题描述】:

我正在尝试在 Windows 中学习 Socket 编程,并且正在使用 cygwin。我发现所需的文件位于/usr/include/w32api/

我从网上获取了一个示例程序并尝试编译但无法编译....相同的代码是

 #include <w32api/windows.h>
 #include <w32api/winsock.h>
 #include <stdio.h>
  int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmd, int nShow)
  {

       WORD sockVersion;
           WSADATA wsaData;
           int nret;

        sockVersion = MAKEWORD(1, 1);           // We'd like Winsock version 1.1

        // We begin by initializing Winsock

        WSAStartup(sockVersion, &wsaData);

       // rest part of code
   }

我在 cygwin 环境中使用 gcc-3 编译它并得到非常奇怪的错误.....

undefined reference to '_WSAStartup08' and many such errors...

我从一个教程网站获取了代码,因此想知道我哪里错了,我应该如何运行程序。

非常感谢..

编辑 ---------

我也尝试过使用 winsock2 而不是 winsock.h,但错误仍然存​​在...

【问题讨论】:

  • 顺便说一句,我认为这可能是因为没有链接 WS2_32.Lib 但我不确定在 cygwin 的哪里可以找到它....我试过 gcc socket.c -l libws2_32.a 但没有成功.....
  • 如果你正在尝试学习 Windows 套接字,你选择 cygwin 的原因是什么?任何 VS20xx Express DE 的 Windows 套接字都非常可靠。为什么不是其中一种环境?

标签: c windows cygwin


【解决方案1】:

-lws2_32 应该这样做。

但是,Cygwin 在 winsock 之上有自己的 POSIX 兼容套接字实现,并且通常混合起来并不是一个好主意。如果您想坚持使用winsock,您可能需要使用gcc-3 的-mno-cygwin 选项,该选项将Cygwin DLL 排除在外。 (您还需要从 #include 行中删除 w32api/。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-09
    • 2011-04-24
    • 1970-01-01
    • 2010-10-16
    • 2021-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多