visual studio 2015 C++ 编译程序兼容xp

这是一个非常痛苦的经历。相信有很多同猿可能也经历过这种洗礼,写在这里给有可能正在经受洗礼的同猿一道刺眼的曙光。

我们的项目最一开始没有考虑兼容xp,于是我就使用了visual studio 2015编译的64位C++程序,64位能够发挥出机器cpu的性能。相信大多数负责任的程序猿都会这么选择。软件上线以后,一道圣旨下来,要求必须兼容xp。于是我就踏上了痛苦的征程。

首先,我酷爱使用vcpkg去安装第三方库,并且饱尝它给我带来的甜头(再也不用一个一个的自己去引用需要的第三方库头文件和库文件了)。当我把平台工具集换成Visual Studio 2015 - Windows XP (v140_xp) 重新编译后,一坨又一坨的编译链接错误就劈头盖脸的打印出来了。这个我经验比较丰富,知道是因为我引用的第三方静态库的编译平台工具集不一致造成的。于是就陷入了深深地痛苦之中。vcpkg不支持以兼容xp的方式安装第三方库,我用到的所有第三方库要用兼容xp的方式自己手工编译一遍。包括:jsoncpp,cryptopp,libcurl,zlib,cpprestsdk,librabbitmq++, boost

boost库的使用让我痛苦不堪,如果使用的是那些只包含hpp头文件而不包含lib库的模块就没有问题,但是大量的代码中使用了boost log,boost filesystem,boost locale,由于boost库很庞大,重新编译也很麻烦,最后决定使用xp兼容模式编译的poco替换掉,重写一部分代码。

再一个让人头疼的是cpprestsdk本身就不支持xp兼容模式编译,所有有关http的部分也换成了poco。

重新编译链接顺利通过,放到xp上跑测试程序顺利通过。但是我意想不到的情况发生了,我编写的模块是一个dll,要由我同事来调用,他在xp上使用LoadLibrary调用我的dll返回错误, GetLastError错误码为998, 错误明文为:内存位置访问无效。后来发现这是由于我的同事使用的visual studio 2010编写的主程序来调用我的dll导致的。经过一番折腾在C/C++ -> 命令行中添加 /Zc:threadSafeInit- 得以解决。至于为什么报这个998错误,有一篇帖子可以再看看:http://blog.gclxry.com/loadlibrary-on-xp-998-error/

以后有时间可以多多熟悉一下poco很方便的一个第三方库,集成了不少好用的功能。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值