c++ - 如何使用 Visual Studio 2017 构建面向 Windows XP 的 Winsock2 (WS2_32.lib) 应用程序

标签 c++ visual-studio-2017 windows-xp winsock2

我有一个用 C++ 编写的应用程序,它使用套接字 (Winsock2.h)。它是在 Windows 10 上开发的,它在 Windows 10 上构建和运行良好。有一台旧的 XP 机器,该应用程序必须在其上运行(该机器无法升级,因为它包含不能在较新系统上运行的遗留代码),但是当我尝试在其上运行应用程序时,出现错误:“过程入口点 WSAPoll 无法位于动态链接库 WS2_32.dll 中”。

我尝试了以下方法:

  1. 我在 XP 机器上下载了 Visual Studio Express 2010 并尝试在其上构建应用程序:
    • 代码无法编译,因为它使用了 libpqxx 库(我怀疑 libpqxx 使用了一些 c++11 代码,VS2010 不完全支持);
  2. 我下载了适用于 Visual Studio 2017 的 XP 工具集 (v141_xp) 并在 Windows 10 上构建了应用程序(我还在 XP 上下载并安装了 Microsoft Visual C++ Redistributable for Visual Studio 2017);

    • 我遇到了同样的错误“无法在动态链接库 WS2_32.dll 中找到过程入口点 WSAPoll”。
  3. 我尝试使用 winsock.h 并将应用程序链接到 wsock32.lib:

    • 我在 WS2_32.lib 上遇到了相同的入口点错误(可能是 VS 将应用程序链接到 WS2_32.lib,即使我指定使用 wsock32.lib)。

有没有办法使用 xp 工具集在 VS2017 上构建一个使用针对 XP 的 Ws2_32.lib 的应用程序?

编辑 2019-05-03 10:30

正如 cprogrammer 和 Remy Lebeau 所注意到的,WSAPoll 在 XP 中不存在。关键是我没有在我的代码中使用 WSAPoll。所以我听从了 Retired Ninja 的建议,从头开始使用 WinSock2 编写了一个应用程序,从最基本的开始逐步添加功能 (*)。好吧,我所有的代码都运行良好。重点是我还包含了另一个库 - libpqxx - 并且它可能使用 WSAPoll。

好吧,我还是有问题,但至少我知道它在哪里

(*) 顺便说一句,我已经在我的代码中使用 WS2_32.lib 的部分尝试了相同的方法,但是由于问题出在另一个库中,我仍然遇到错误,所以从头开始的建议确实有帮助.

最佳答案

根据docs ,对于 WSAPoll,支持的最低客户端是 Windows 8.1、Windows Vista [桌面应用 | UWP 应用]

不能用于针对 Windows XP 的应用程序。

关于c++ - 如何使用 Visual Studio 2017 构建面向 Windows XP 的 Winsock2 (WS2_32.lib) 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55955790/

相关文章:

c++ - 使用自定义源 boost Iostreams zlib_error

c++ - Visual C++完美转发编译报错

command-line - 在 Windows 命令提示符中丢失了正斜杠的使用

windows - 运行Perl脚本通过DOS命令提示符调用网页?

windows - Win32 : How to crash?

c++ - 将数组的值传递给修改值然后将其返回到新数组的函数

c++ - 嵌套名称说明符中命名的不完整类型

linux - 如何在 MSBuild 中获取当前操作系统?

c++ - 如何解决将未知大小的二维数组传递给函数的问题?

typescript - 不需要的 *.js 和 *.js.map 文件正在项目的某些区域从 .ts 生成