annoy编译安装问题及解决
1、背景
annoy做紧邻检索、相似度的计算,在一些looklike的场景下需要使用,然而annoy的官方提供的安装包是源码,没有提供在x86机器的对应whl文件,因此需要编译安装。
2、问题
在封闭环境编译安装的过程通常会碰到以下问题:
(1)问题:gcc: error tring to exec 'cc1plus':execvp:No such file or directory
原因:annoy的c++开发的,编译过程需要用到g++,在编译的参数里面有-std=c++14(c++11),所以机器环境需要有和gcc配套的g++,出现该问题大概率是因为g++没有安装。
解决办法:安装g++,需要开通root权限
(2) 问题:shared_mutex没有该文件或不存在
原因:annoy的源码里的annoylib.h里引用了shared_mutex,这个跟gcc/g++的版本有关系,安装文件用的c++14,而g++的版本支持到c++11,就会找不到对应的shared_mutex头文件。
解决:要么升级gcc或g++的版本,要么调低annoy的版本使其能够和c++11(-std=c++11)相兼容,改用annoy的1.16.3里面在set_up.py里看到是c++11
3、总结
安装annoy的过程主要涉及到了对c++的编译,对操作系统的gcc的版本有要求,gcc4.8.5的版本对应的g++支持到c++11,并最终生成了annoy的whl文件供使用