这是一个非常痛苦的经历。相信有很多同猿可能也经历过这种洗礼,写在这里给有可能正在经受洗礼的同猿一道刺眼的曙光。
我们的项目最一开始没有考虑兼容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。
重新编译链接顺利