我们都知道,faiss是facebook开源的相似性搜索的开源项目,基于C++和python都有相应的实现,但是一直没有go版本,go要怎么去调用呢?可以直接通过go去调用c++的函数接口去实现;

go调用faiss的例子可以参考这个文档:faiss package - github.com/DataIntelligenceCrew/go-faiss - Go Packages ,我这里主要说一下怎么通过C++源码编译到动态库供go调用的细节;

首先官网的安装文档可以看这里:https://github.com/facebookresearch/faiss/blob/main/INSTALL.md

建议使用cmake编译,按照官网的步骤你去编译,当然是会报错的,会需要科学计数库,这个官网推荐是intel的,我这里也介绍intel的mkl库怎么安装,intel的mkl库还挺难找,记住我们需要安装的是i这个东西Parallel Studio XE Runtime,在官网通过这个关键字搜索,去找到安装方法,我这里就发出来ubuntu通过apt的安装方法:Installing Intel® Parallel Studio XE Runtime 2020 Using APT Repository

通过添加apt源之后,我们可以安装这个runtime库里的任何软件包了,直接安装intel-mkl-runtime包就好,其他包faiss用不上, apt-get install intel-mkl-runtime

安装好之后,这里也是个比较容易遇到问题的地方,你在用cmake去编译,还是会报缺少数学库,那是因为mkl安装的位置默认是在/opt/intel/psxe_runtime/linux/mkl/ 下面,安装版本不同,psxe_runtime的名字可能有不同,这时候我们运行一下该命令:source /opt/intel/oneapi/setvars.sh intel64 ,把安装的目录设置到环境变量,让cmake编译的时候找得到mkl的依赖,当然你也可以直接去/etc/ld.so.conf.d/ 目录下,添加mkl安装的动态库路径,例如我安装的动态库路径/opt/intel/psxe_runtime/linux/mkl/lib/intel64_lin/ , 然后再执行ldconfig

安装后数学库之后,下一个就要安装swig了,因为无论是python还是go,都需要用swig这个工具,进行动态库的编译,如果你之前用conda安装了低版本的faiss,那你系统肯定有swig,安装最新版本的时候,大概率会报不支持-doxygen参数的错误,这时候,我们直接去源码安装最新的swig,官网地址:GitHub - swig/swig: SWIG is a software development tool that connects programs written in C and C++ with a variety of high-level programming languages.

按照官网安装说明编译安装即可,记得选最新的release tag安装,如果使用configure方式安装,记得安装好所有的autoconf,autotools的那一系列工具,然后通过项目的autogen.sh脚本生成configure进行预编译。

安装完swig之后,我们就可以继续编译faiss的接口了,如果之前机器上有swig,那编译的时候一定要带上新安装的swig库地址,所以最后的编译参数是:

cmake -B ./ -DFAISS_ENABLE_GPU=OFF -DFAISS_ENABLE_C_API=ON -DBUILD_SHARED_LIBS=ON -DSWIG_DIR=/usr/local/share/swig/4.1.0 -DSWIG_EXECUTABLE=/usr/local/bin/swig

make && make install之后,libfaiss_c.so默认会安装到/usr/local/lib/ 目录里面,如果你的默认库目录没有这个目录,记得通过ldconfig配置一下,或者直接在/usr/lib下设一个软链。

所有安装完成,,按照例子go get一下go-faiss这个项目安装go调用c++的库,最后可以直接参照go-faiss项目的例子进行faiss测试了

go 调用faiss服务相关推荐

  1. 【随记】动态调用web服务

    通常我们在程序中需要调用WebService时,都是通过"添加Web引用",让VS.NET环境来为我们生成服务代理,然后调用对应的Web服务.这样是使工作简单了,但是却和提供Web ...

  2. SharePoint 2013 调用WCF服务简单示例

    内容比较简单,主要记录自己使用SharePoint 2013WCF服务遇到的小问题和小经验,分享给大家,希望能够给需要的人有所帮助.好吧,进入正题! 第一部分 SharePoint 2013调用自带W ...

  3. 实现在GET请求下调用WCF服务时传递对象(复合类型)参数

    WCF实现RESETFUL架构很容易,说白了,就是使WCF能够响应HTTP请求并返回所需的资源,如果有人不知道如何实现WCF支持HTTP请求的,可参见我之前的文章<实现jquery.ajax及原 ...

  4. 实现jquery.ajax及原生的XMLHttpRequest调用WCF服务的方法

    废话不多说,直接讲解实现步骤 一.首先我们需定义支持WEB HTTP方法调用的WCF服务契约及实现服务契约类(重点关注各attribute),代码如下: //IAddService.cs namesp ...

  5. WCF 入门之旅(4): 怎样用客户端调用WCF服务

    WCF 入门之旅(4): 怎样用客户端调用WCF服务 前面的demo已经能够跑起来,现在开始考虑用客户端来测试所写的应用了,首先用个普通的应用程序来调用所写的wcf服务吧.其实最后运行wcf服务后的页 ...

  6. java jolt调用tuxedo_Jolt调用Tuxedo服务,该怎么处理

    Jolt调用Tuxedo服务 JoltSession session; JoltSessionAttributes sattr; JoltRemoteService toupper; JoltTran ...

  7. 绑定服务调用本地服务中的方法

    如果想调用服务中的方法, 通过startService()是做不到的, 这时需要用bindService来解决. 下面的demo是在Activity中调用Service中的自定义方法---method ...

  8. Silverlight同步(Synchro“.NET研究”nous)调用WCF服务

    Silverlight的RIA应用中访问远端的WebService或WCF服务,都是通过异步线程模式调用的.在某些情况下我们的调用是需要同步进行,虽然Silverlight没有内置同步线程模式调用远端 ...

  9. Elasticsearch java客户端调用cat服务

    开发环境,测试环境,预发环境和生产环境一般相互隔离的,使用开发环境或者测试环境可以使用cat来查看索引的情况 例如: 但预防环境和测试环境是不允许访问的,那怎么办呢? 可以使用后台来查看上述信息,提供 ...

最新文章

  1. 4000个“不会数学”的程序员出现大反转!居然能学AI,玩算法,搞逻辑!背后原因首次曝光...
  2. 微信小程序城市定位(百度地图API)
  3. 如何在ASP.NET页面中使用异步任务(PageAsyncTask)
  4. excel 粘贴了HTML怎么删掉,Excel怎么删除网页上复制删不掉的文本框
  5. 【问底】严澜:数据挖掘入门——分词
  6. 【Machine Learning】KNN学习算法与C语言实现
  7. 通达oa与mysql集成_安装通达OA后想使用其自带的Mysql数据库的解决方法
  8. java写界面_java能不能直接做界面窗口
  9. Leetcode--152. 乘积最大子序列
  10. Android开发(二十四)——数据存储SharePreference、SQLite、File、ContentProvider
  11. push_back模式工作
  12. vue 第八天 小结 作业模拟购物车
  13. JavaScript 基础概念
  14. 流体力学专业常用网站集合
  15. Maven中settings文件详解
  16. 传奇服务器固态硬盘和陈列,租用服务器选择固态硬盘的优点和缺点
  17. 儿子的读后感:有爱,有趣——读《大地之歌》有感
  18. u3d5第一人称射击游戏(C#脚本)完整版并在iOS9.3系统上真机运行
  19. WINDOWS10 微软应用商店 microsoft store  打不开  显示无法加载页面
  20. xubuntu16.04禁用快捷键(Ctrl+Alt+T)打开终端

热门文章

  1. 打印机安装(驱动+安装)
  2. 一组有关IT公司的笑话
  3. RedisTemplate 保存数据的键值通过rdm可视化工具查看乱码
  4. Android实现来电和去电的监听
  5. 发布一个倒计时软件(C# 开源)
  6. 如何删除服务器出现的.nfs文件
  7. python colors属于哪个包,Colour首页、文档和下载 - Python 颜色科学软件包
  8. 嫌官方文档太烂?TensorFlow 开源工具书,助你快速上手开发!
  9. Linux中的动态监控
  10. iOS 和 Android:UITableView与RecycleView的重用机制比较