之前开发的Xukey,在PHP5.6和5.6之前的版本都没有任何问题,在兼容PHP7之后,执行生成随机数会出现“”段错误“”。编译扩展时加入debug,提示php terminated *** stack smashing dete。这样的错误和没有提示直接退出没有什么区别。之后又用gdb调试,这个错误明显一些,提示 /sysdeps/x86_64/rawmemchr.s:37。不过仍然是丈二的和尚摸不着头脑。
于是,在PHP扩展开发群里提问,有个朋友提示说你换CLANG吧,这个提示很明显。于是就换了clang。这次奇迹真的发生了,虽然编译仍然没有问题,但是在内存泄露的时候给出了提示,并且提示是某个文件的第几行。哇。真的这么神奇吗?恩,就是这么神奇,看来真的应该淘汰GCC了。
编译PHP切换为clang需要执行如下命令:alias cc=clang。这样编译的时候就会使用clang来编译了。还有一点clang编译速度比gcc要快很多