3

我有两台机器,一台运行 Vista Ultimate 32,另一台运行 XP SP3。两台机器都安装了相同的VS2008版本。
我在第一台机器(vista)上构建了 boost 1.50.0,然后是依赖于 boost 的 libtorrent 库。
我在一些 libtorrent 构建指令中看到 win 版本是在预处理器中指定的,所以我做了目前似乎有意义的事情:

#define _WIN32_WINNT=0x0600  // being that the current OS is Vista

构建成功,我能够在那台机器上运行应用程序。但是,当我尝试在另一个(XP)上运行它时,它失败并显示消息,例如:

无法在动态链接库 KERNEL32.dll 中找到过程入口点 SetFileInformationByHandle

现在,从逻辑上讲,我猜这与不兼容的版本有关,并且当这个变量以不同的值存在时,可能包含不同的 Windows 标头。

要求:我想在 Vista 或 7 上构建它,并且仍然能够在 XP 上运行它。
问题:我是否需要这个指令,如果需要,值应该是多少?如果我遗漏了什么,我还应该指定什么?

4

1 回答 1

1

尝试在 XP 上构建您的程序或设置_WIN32_WINNT0x0501(如您的评论中所述)。根据这份报告,该kernel32.dll库是向后二进制兼容的,因此您可以使用该库的旧版本 (5.0) 构建程序并使用新版本 (6.0) 运行它,而无需重新编译。反之亦然,因为添加了一堆符号(其中之一)。SetFileInformationByHandle

于 2012-08-09T16:20:19.267 回答