Windows版预处理器和构建以实现向后兼容性?

时间:2012-08-09 11:25:18

标签: windows boost version c-preprocessor backwards-compatibility

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

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

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

  

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

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

要求:我想在Vista或7上构建它,并且仍然可以在XP上运行它。
问题:我是否需要此指令?如果我这样做,那么该值应该是什么?如果我遗失了什么,我还应该指定什么呢?

1 个答案:

答案 0 :(得分:1)

尝试在XP上构建程序或将_WIN32_WINNT设置为0x0501(如评论中所示)。根据{{​​3}},kernel32.dll库是向后二进制兼容的,因此您可以使用此库的旧版本(5.0)构建程序,并使用新版本(6.0)运行它,而无需重新编译。反之亦然,因为有一堆添加的符号(SetFileInformationByHandle就是其中之一)。