ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Windows10 下 cmake 编译 faiss 记录:用 TaoToken 统一 Key 跑通配置骨架

Windows10 下 cmake 编译 faiss 记录:用 TaoToken 统一 Key 跑通配置骨架 1. Windows10 下 cmake 编译 faiss 到底卡在哪如果你正在 Windows10 上折腾本地向量检索大概率会搜到 faiss 这个库。它能做什么简单说就是把一堆文本、图片、音频转成向量之后帮你快速找出「最相似的那几条」。适合谁做 RAG 本地知识库、推荐系统召回、图像去重、语义搜索的开发者。而 Windows10 cmake 编译 faiss是很多人从「想用」到「真用上」之间最容易翻车的一段路。我自己第一次编译时卡了整整一个下午cmake 报找不到 BLAS、googletest 下载超时、CUDA 路径写错、MSVC 版本对不上。后来把流程拆成「依赖装好 → cmake 配置 → 编译 → 验证」四步才一次跑通。这篇记录就按这个顺序写同时把 AI 工具链的 Key 统一交给 TaoToken 管理让编译排障时能直接问模型不用在多个平台之间来回切 Key。核心检索词先摆出来Windows10、cmake、faiss、向量检索、BLAS、googletest。下面所有命令和配置都可以直接复制你只需要把路径换成自己机器上的。2. 前置准备依赖、TaoToken 统一 Key 与目录规划2.1 编译 faiss 需要的三样东西faiss 本身是 C 库Windows 上没有官方预编译包所以必须自己编。它依赖三块第一块是 BLAS 实现。faiss 的向量距离计算靠它加速。Windows 上可选 Intel oneAPI内含 MKL、单独装 Intel MKL或者编译 OpenBLAS。我实测下来 oneAPI 最省事因为它把编译器和 MKL 打包在一起了。第二块是 CMake 和 Visual Studio。CMake 负责生成工程MSVC 负责真正编译。建议 VS2019 或 VS2022装的时候勾选「使用 C 的桌面开发」。第三块是 CUDA可选。只有你要用 GPU 版 faiss 才需要纯 CPU 检索可以跳过。如果装记得记下 CUDA 安装路径后面 cmake 要显式指定。2.2 为什么用 TaoToken 统一 Key编译过程中你会反复遇到报错最有效的排障方式是把错误贴给模型问。但如果每个 AI 工具都单独配 Key管理起来很乱。TaoToken 的思路是一个 Key 走统一 API 通道Claude Code、Cursor、各类支持 OpenAI 兼容接口的工具都能接。官网入口在这里https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content。API 基址是 https://taotoken.net/api注意这个地址不带 UTM 参数配置时直接填。你需要先去控制台建一个 Keyhttps://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_campaignrewriteutm_content。建完在 API Keys 页面能看到https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_campaignrewriteutm_content。这个 Key 后面会写进工具的 settings.json。2.3 目录规划我习惯把源码和依赖分开避免路径里出现中文和空格D:\dev\ ├── faiss\ # faiss 源码 ├── build\ # cmake 构建目录 └── deps\ # 第三方依赖路径里千万别有中文或空格cmake 在 Windows 上对这两样很敏感这是踩过的坑之一。3. 可复制配置CMakeLists、config.toml 与 settings.json3.1 拉取 faiss 源码打开 PowerShell进到 D:\devcd D:\dev git clone https://github.com/facebookresearch/faiss.git cd faiss git checkout v1.7.4用 v1.7.4 是因为它在 Windows 上相对稳定新版本有时会引入新的依赖问题。clone 完之后源码根目录会有一个 CMakeLists.txt但我们不直接改它而是用命令行参数控制。3.2 关键 cmake 配置命令这是整篇最核心的一段。在 D:\dev 下建 build 目录然后执行mkdir D:\dev\build cd D:\dev\build cmake -G Visual Studio 17 2022 -A x64 -DCMAKE_BUILD_TYPERelease -DFAISS_ENABLE_GPUOFF -DFAISS_ENABLE_PYTHONOFF -DFAISS_ENABLE_GPUOFF -DBUILD_TESTINGOFF -DBLAS_LIBRARIESC:/Program Files (x86)/Intel/oneAPI/mkl/latest/lib/intel64/mkl_intel_lp64.lib;C:/Program Files (x86)/Intel/oneAPI/mkl/latest/lib/intel64/mkl_sequential.lib;C:/Program Files (x86)/Intel/oneAPI/mkl/latest/lib/intel64/mkl_core.lib -DBLAS_INCLUDE_DIRSC:/Program Files (x86)/Intel/oneAPI/mkl/latest/include ..\faiss几个参数逐个解释-G Visual Studio 17 2022指定生成器对应 VS2022。如果你装的是 VS2019改成Visual Studio 16 2019。-DFAISS_ENABLE_GPUOFF先关掉 GPU纯 CPU 编译成功率最高。等 CPU 版跑通再开 GPU。-DBUILD_TESTINGOFF是重点。faiss 默认会去下载 googletest国内网络经常超时。关掉测试就绕过了这个下载。-DBLAS_LIBRARIES和-DBLAS_INCLUDE_DIRS指向 oneAPI 里的 MKL。路径按你实际安装位置改。3.3 config.toml 骨架如果你用 Python 侧调用或者工具链需要配置文件可以放一个 config.toml[faiss] index_type IndexFlatL2 dimension 768 metric l2 [blas] backend mkl library_path C:/Program Files (x86)/Intel/oneAPI/mkl/latest/lib/intel64 [taotoken] api_base https://taotoken.net/api model claude-sonnet-4-20250514这个骨架的作用是把索引类型、维度、BLAS 后端、API 通道集中管理后面写调用代码时直接读它。3.4 AI 工具的 settings.json 示例以支持 OpenAI 兼容接口的工具为例settings.json 这样写{ apiProvider: openai-compatible, apiKey: 你的TaoToken Key, baseURL: https://taotoken.net/api, model: claude-sonnet-4-20250514, maxTokens: 8192 }把 apiKey 换成你在控制台建的那个。baseURL 固定填 https://taotoken.net/api。这样编译报错时直接把错误贴进去问不用再单独配别的 Key。4. 编译与验证从 cmake 到一次成功检索4.1 执行编译cmake 配置成功后build 目录里会生成 faiss.sln。用命令行编译cmake --build . --config Release --target faiss如果你要编译 Python 绑定把 target 换成swigfaiss。编译过程大概几分钟到十几分钟取决于机器。看到Build succeeded就说明库出来了。产物在D:\dev\build\faiss\Release\faiss.lib和对应的 dll。4.2 写一个最小验证程序新建test_faiss.cpp#include faiss/IndexFlat.h #include iostream #include vector int main() { int d 4; faiss::IndexFlatL2 index(d); std::vectorfloat data { 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f }; index.add(3, data.data()); std::vectorfloat query {0.9f, 0.1f, 0.0f, 0.0f}; int k 2; std::vectorfaiss::idx_t labels(k); std::vectorfloat distances(k); index.search(1, query.data(), k, distances.data(), labels.data()); std::cout nearest: labels[0] dist: distances[0] std::endl; return 0; }编译它链接 faiss.lib 和 MKLcl test_faiss.cpp /I D:\dev\faiss ^ /link D:\dev\build\faiss\Release\faiss.lib ^ C:\Program Files (x86)\Intel\oneAPI\mkl\latest\lib\intel64\mkl_intel_lp64.lib ^ C:\Program Files (x86)\Intel\oneAPI\mkl\latest\lib\intel64\mkl_sequential.lib ^ C:\Program Files (x86)\Intel\oneAPI\mkl\latest\lib\intel64\mkl_core.lib4.3 成功结果长什么样运行test_faiss.exe输出nearest: 0 dist: 0.02说明向量 [0.9, 0.1, 0, 0] 最接近第 0 条数据距离 0.02。到这一步faiss 编译和调用就通了。如果你还想验证模型通道是否正常可以去模型对话页面发一条测试https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_campaignrewriteutm_content。把上面的编译错误贴进去看模型能不能给出可执行建议。5. 本篇常见报错排查5.1 cmake 找不到 BLAS报错类似Could NOT find BLAS。原因通常是-DBLAS_LIBRARIES路径写错或者 oneAPI 没装全。检查路径下是否真有mkl_intel_lp64.lib。如果用的是 OpenBLAS把路径换成openblas.lib即可。5.2 googletest 下载超时报错里出现Downloading googletest然后卡住。解决办法就是配置时加-DBUILD_TESTINGOFF。如果已经配置过删掉 build 目录重新来一遍。5.3 MSVC 版本不匹配报错The C compiler identification is unknown。说明 VS 没装 C 工作负载或者 cmake 找不到编译器。重装 VS勾选「使用 C 的桌面开发」然后重新开一个 PowerShell 窗口。5.4 链接时报 unresolved external symbol这是 MKL 库没链全。faiss 需要mkl_intel_lp64、mkl_sequential、mkl_core三个一起链少一个都会报符号找不到。按 4.2 的命令补齐。5.5 运行时找不到 dll把faiss.dll和 MKL 的 dll 目录加到 PATH或者直接拷到 exe 同目录。MKL 的 dll 在oneAPI\mkl\latest\redist\intel64。6. 把 Key 和编译流程一起固化下来编译 faiss 这件事真正麻烦的不是某一条命令而是依赖、路径、参数三者之间的配合。我现在的做法是把 3.2 的 cmake 命令存成一个build.ps1把 3.4 的 settings.json 固定好Key 统一走 TaoToken。这样换机器或者重装系统时直接跑脚本就行。如果你后面要做长期编码或者 Agent 类项目可以考虑 Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_campaignrewriteutm_content。接入文档在https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_campaignrewriteutm_content。Claude Code 相关配置参考https://taotoken.net/claudecode-anthropic?utm_sourcetaotoken_aicg_blog_endutm_campaignrewriteutm_content。最后留一个实用技巧每次 cmake 配置失败先删 build 目录再重来比在旧缓存上改参数靠谱得多。faiss 的 CMakeCache.txt 会记住上一次的错误路径不清掉很容易反复报同一个错。
返回列表