ARTICLE DETAIL

资讯详情

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

pgvector Windows 编译报 “crtdefs.h“ 缺失:3 条自检命令定位并修复

pgvector Windows 编译报 “crtdefs.h“ 缺失:3 条自检命令定位并修复 pgvector Windows 编译报 crtdefs.h 缺失3 条自检命令定位并修复【免费下载链接】pgvectorOpen-source vector similarity search for Postgres项目地址: https://gitcode.com/GitHub_Trending/pg/pgvectorpgvector 是 PostgreSQL 的向量相似性搜索扩展Windows 版用 MSVC 加 nmake 构建源码版本 0.8.6。如果你在nmake /F Makefile.win时看到fatal error C1083: Cannot open include file: crtdefs.h说明 Windows SDK 的 UCRT 头文件路径没有进入编译器搜索路径问题通常出在编译环境而不是 pgvector 代码本身。适用环境Windows 64 位 PostgreSQL14 及以上 Visual Studio C 工具链。报错现场首次构建的几种典型失败最典型的一条是 MSVC 的 C1083 缺头文件报错src\vector.c(1): fatal error C1083: Cannot open include file: crtdefs.h: No such file or directory看到它就可以往下走。另外三类近亲报错也常出现在 Windows 编译里后文分别归入不同场景Cannot open include file: postgres.h: No such file or directory包含路径全部由PGROOT推导Makefile.win 第 28-29 行error C2196: case value 4 already used通常是位数用混了PGROOT is not setMakefile.win 第 24-26 行的!error检查没通过nmake 直接退出先定位再动手两条命令判断你在哪个场景先在你报错的那个终端或新开的终端执行。如果还没拿到源码先 clonegit clone https://gitcode.com/GitHub_Trending/pg/pgvector。确认 PGROOT 是否已设置适用系统Windows cmdecho %PGROOT%预期输出是类似C:\Program Files\PostgreSQL\18的真实路径。如果原样打印%PGROOT%或为空进场景 A。确认 MSVC 环境是否已加载where cl预期输出是...\VC\Tools\MSVC\...\bin\Hostx64\x64\cl.exe这样的路径。提示找不到文件就进场景 B——这是 crtdefs.h 报错最常见的原因。两条都通过但重新编译出现error C2196则是场景 C。场景 APGROOT 没设或指错位置怎么做在当前终端把 PGROOT 指向你的 PostgreSQL 安装根目录路径含空格必须带引号set PGROOTC:\Program Files\PostgreSQL\18再重新执行nmake /F Makefile.win。Makefile.win 第 42 行的 CFLAGS 里port\win32_msvc、port\win32等包含目录全部由 PGROOT 拼出来指对位置后 postgres.h 才能被找到。正常应看到echo %PGROOT%输出真实路径dir %PGROOT%\include\server能列出postgres.hnmake 不再报 PGROOT 相关错误。不生效时往哪查确认该 PostgreSQL 是完整安装缺少include\server目录说明安装不完整或装的是 32 位版README 的 Missing Header 条目给出的也是同一结论先核对 PGROOT。场景 Bcrtdefs.h 找不到终端用错了这是最典型的场景。crtdefs.h 属于 Windows SDK 的 UCRT 系统头对应包含路径由 VS 原生工具脚本注入环境变量在普通 cmd 或 PowerShell 里跑 nmakecl可能已在 PATHSDK 路径却不在C1083 就出现了。怎么做关掉当前终端从开始菜单启动 x64 Native Tools Command Prompt for VS按你安装的版本选如 VS 2022README 明确要求用这个终端且建议以管理员身份运行。然后设置 PGROOT 并编译安装set PGROOTC:\Program Files\PostgreSQL\18 nmake /F Makefile.win nmake /F Makefile.win install正常应看到终端里where cl返回Hostx64\x64路径编译不再报 C1083源码目录生成vector.dll和一组.obj文件。不生效时往哪查打开 Visual Studio Installer确认 使用 C 的桌面开发 工作负载已装好且其中包含 Windows SDK 组件只装了编译器工具链而漏掉 SDK 的补装后重开终端再来。场景 C位数不匹配error C2196现象与原因error C2196: case value 4 already used。基本是拿 x8632 位编译器在编 64 位 PostgreSQL 的头文件两边对位宽的假设对不上。怎么做先确认你在 x64 Native Tools 终端里再清理重建适用系统Windows cmdnmake /F Makefile.win clean nmake /F Makefile.win nmake /F Makefile.win install正常应看到不再有 C2196vector.dll被拷贝到%PGROOT%\libinstall 目标Makefile.win 第 62 行vector.control和各版本 SQL 进入%PGROOT%\share\extension。不生效时往哪查where cl输出路径必须含x64核对 PostgreSQL 安装位数与终端位数一致不要 x86 终端配 x64 安装。验证与回退编译安装完成后先确认产物落位预期两个文件都列出dir %PGROOT%\lib\vector.dll dir %PGROOT%\share\extension\vector.control再连库验证版本预期输出0.8.6与 vector.control 第 2 行的default_version一致%PGROOT%\bin\psql -U postgres -c CREATE EXTENSION vector; %PGROOT%\bin\psql -U postgres -c SELECT extversion FROM pg_extension WHERE extname vector;想跑完整回归就执行nmake /F Makefile.win installcheckMakefile.win 第 69 行目标会依次跑 test/sql/ 下的回归脚本。哪一步失败按报错文本回到对应场景postgres.h 相关回场景 Acrtdefs.h 回场景 BC2196 回场景 C。避坑清单与延伸入口报错/现象原因处理unresolved external symbol float_to_shortest_decimal_bufnPostgres 17.0-17.2 链接缺失升级到 17.3Access is deniedinstall 步骤权限不足以管理员身份重跑PGROOT is not setPGROOT 未设置在当前终端 set PGROOTC1083crtdefs.hSDK 路径未加载换 x64 Native Tools 终端C1083postgres.hPGROOT 指错检查include\server目录更多细节看 README.md 的 Installation Notes - Windows 一节版本变更记录在 CHANGELOG.md构建逻辑可直接读 Makefile.win包含路径在第 42 行。【免费下载链接】pgvectorOpen-source vector similarity search for Postgres项目地址: https://gitcode.com/GitHub_Trending/pg/pgvector创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表