.exe 能否使用 v141_xp 构建,但将库构建与“v141 工具集”支持“windows XP”连接起来?

问题描述

我们的团队正在努力让我们的项目支持 XP。
我们正在使用 visual studio 2017 来构建结果可执行文件
但是,VCPKG 现在不支持 XP。因此,我们尝试手动构建相关包(例如 yaraspdlogopenssl...)。

在“试错”的过程中,我们发现了一件很奇怪的事情。当我们使用 “v141_xp 工具集” 构建项目,并使用 “v141 工具集”(该 SDK 不支持 XP)链接构建的库时。
生成的可执行二进制文件在 Windows XP 中运行良好。

  • 示例:
    1. 我们使用"v141 toolset"构建spdlog静态库,使用"/MT"编译,生成spdlog.lib >.
    2. 然后我们使用“v141_xp 工具集”编译下面的代码链接spdlog.lib (v141)。它生成"example.exe"

#include <iostream>
#include <spdlog/spdlog.h>

int main()
{
    spdlog::info("spd go");
    std::cout << "Hello World!\n";
}

然后在 windows XP 中运行 "example.exe",它可以正常工作,不会弹出任何错误窗口。

这是一个简单的例子,可以帮助我更轻松地解释情况。事实上,我们已经尝试了所有与包相关的示例代码,使用相同的方法
看来我们不需要再次使用“v141_xp”重新构建包。

这是我的问题:

  • 真的安全吗?它会导致一些潜在的问题吗?

    我们使用 v141_xp(SDK 7.1A) 编译我们的应用程序,使用 v141(SDK 8.1) 链接库构建。

  • "v141""v141_xp" 有什么区别?从我们的实验来看,两者都可以在XP上运行。看起来几乎没有区别。

    (我们使用 v141 构建在 XP 中运行的 .exe 构建,链接时带有额外的标志 /subsystem:console,5.01。)

这种奇怪的行为让我很困惑。非常感谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)