VS2017编译Teamtalk的Windows客户端遇到的错误解决记录

1.遇到的第一个错误:hash_map is deprecated,让换成unordered_map,于是我全体替换,然后又报了些新错,按照提示一一解决即可,但是我右键看了下项目属性,发现,采用Visual Studio 2013 – Windows XP (v120_xp)这个平台工具集,vs2017可以安装vs2013来取得2013的平台工具集,下载安装vs2013之后,项目右键属性切换到Visual Studio 2013 – Windows XP (v120_xp)即可。

2.遇到的第二个错误:进入/server/src/libsecurity/win/目录下命令行运行build.bat批处理文件,但其提示“else 不是内部或外部命令,也不是可运行的程序或批处理文件。”修改批处理文件else跟随到右括号)后面即可,但执行build.bat clean的时候仍然会报rm的错,这个不去管它也可以。这里需要明确一点,就是安装vs2017的时候勾选了cmake组件,如果没有勾选,那么可以手动去cmake官方网站下载安装即可。可以把cmake添加到环境变量,也可以将build.bat中cmake命令带上完整路径。如果用vs2017自带的那需要打开Native Tools Command Prompt – “Visual Studio 2017 Developer Command Prompt v15.9.9”,然后在这个特殊的命令行窗口中进入源码目录运行cmake。之后就会生成security项目的vs2017解决方案sln相关文件等。

3.遇到的第三个错误:编译security.sln,int8_t重复定义,不同的基础类型,这个项目右键属性切换到Visual Studio 2013 – Windows XP (v120_xp)即可。也可以屏蔽头文件中int8_t这行。

4.遇到的第四个错误:无论上面是屏蔽或者切换工具集,都会报这个错误:pTmp 未定义的标识符,我在头文件中添加了定义char* pTmp;,然后编译正常,放到teamtalk win-client工程中编译也正常,但是运行起来就报错:nullptr,写入访问权限冲突,应该是头文件中定义的时候要初始化值。上网搜到这个办法:将这行注释内容“// 先申请nLen 个长度,解密完成后的长度应该小于该长度”添加一个半角英文句号变成这样“// 先申请nLen 个长度,解密完成后的长度应该小于该长度.”即可。同时另一个错误AES_decrypt函数不支持2个参数也得到了解决。

5.遇到的第五个错误:phpmyadmin无法访问,报mysqli connect错误,经查看mysqli组件存在,搜索后发现问题出在phpmyadmin的配置文件,将localhost修改为127.0.0.1即可。

至此,问题基本解决,编译正常,测试使用正常。