admin 管理员组文章数量: 887021
前言
最近要做个守护程序来监听一个http程序,故想到了windows的服务程序。因为大量用户使用xp系统,所以要兼容xp。
我用的是vs2019和boost库。两个都需要设置,才能保证程序在xp下能跑。
vs2019 设置
根据网上的资料,先添加支持xp的编译组件。
我之前没有安装VS 2017 x64/x86生成工具,导致程序一直运行不起来。
把项目的属性的平台工具集改成v141xp,这一步应用之后,vs会自动帮你修改一些参数。
参考文章:VS2019怎样编译出可以在WinXP上运行的exe
重新编译boost库
因为我用的是boost库是1.73.0,所以用这个当示例。
首先下载下来,运行目录下的bootstrap.bat,运行完之后,就会出现一个b2.exe的程序。
我们现在找的vs2019的Developer Command Prompt for VS2019的命令行,打开,切换到boost主目录下,输入一下命令:
b2.exe -j4 --toolset=msvc-14.1 define=BOOST_USE_WINAPI_VERSION=BOOST_WINAPI_VERSION_WINXP define=_WIN32_WINNT=0x0501 define=_BOOST_USE_WINDOWS_H --build-type=complete stage
-j4 代表运行四个线程去编译,如果你需要用电脑,那么不要加这个参数。
等待大约半个小时,编译完成。vs配置属性 -> C++ -> 命令行 添加-D_WIN32_WINNT=0x0501 ,告诉boost要兼容xp。
参考文章:使用Visual C++高版本的XP支持生成带boost执行文件在XP上报kernel32缺函数
vs2019设置
把boost的头文件和库文件引入到项目中,编译下即可。
结尾
看网上说,编译boost要改什么环境变量,实测不用改也可以。vs2012 编译boost库 兼容xp系统 ,可能vs2019更加智能了。
还有补充一句,因为xp没有UAC控制,所以直接用ShellExecute调起第三方程序就可以了。
用系统函数要注意函数是否支持xp。
后补如何判断是xp系统:
bool isXP()
{
OSVERSIONINFO osver;
osver.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx(&osver);
if (osver.dwPlatformId == 2)
{
if (osver.dwMajorVersion == 5)
{
return true;
}
}
return false;
}
版权声明:本文标题:VS2019和boost编译支持xp系统 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1725927262h894052.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论