Windows 下 gtsam python 编译及报错解决
转自Windows 下 gtsam python 编译及报错解决_gtsam编译报错typeerror: unhashable type: typename-CSDN博客gtsam-py依赖环境版本仅供参考VS版本2015-2026应该都可以boost尽量选尽可能高的不要低于1.70Visual Studio2022cmakecondaboost(1.70-1.90)步骤步骤下载 gtsam 源码没有外部仓库下源码压缩包即可源码链接源码压缩包下载链接解压源码在 conda 终端选择虚拟环境然后执行命令切换到源码路径cd 源码路径执行命令cmake -B build -DGTSAM_BUILD_PYTHONON -DCMAKE_C_FLAGS-D_CRT_NONSTDC_NO_DEPRECATE /GS- -DCMAKE_INSTALL_PREFIXgtsam_install其中GTSAM_BUILD_PYTH 是为了开启 python 支持默认关闭CMAKE_C_FLAGS 设置c编译选项避免后面的一些报错CMAKE_INSTALL_PREFIX 设置安装路径到源码路径/gtsam_installcmake -S . -B build -G Visual Studio 17 2022 -A x64 -DCMAKE_TOOLCHAIN_FILED:/vcpkg/scripts/buildsystems/vcpkg.cmake -DCMAKE_INSTALL_PREFIXgtsam_install -DGTSAM_BUILD_PYTHONON -DGTSAM_BUILD_UNSTABLEOFF -DGTSAM_UNSTABLE_BUILD_PYTHONON -DGTSAM_USE_SYSTEM_PYBINDOFF -DPython3_EXECUTABLEC:/Users/icwei/miniconda3/envs/vggtslam/python.exe -DPython3_ROOT_DIRC:/Users/icwei/miniconda3/envs/vggtslam -DPython3_INCLUDE_DIRC:/Users/icwei/miniconda3/envs/vggtslam/Include -DPython3_LIBRARYC:/Users/icwei/miniconda3/envs/vggtslam/libs/python311.lib -DPython3_FIND_STRATEGYLOCATIONcmake绑定python建议查看type build\CMakeCache.txt | findstr Python重点看类似Python_EXECUTABLEPython3_EXECUTABLE应该是C:/Users/.../miniconda3/envs/vggtslam/python.exe如果不是就重新配置---------------------------------------------------------------------------------• 可以用 Python 3.11并生成gtsam.cp311-win_amd64.pyd当前问题是 GTSAM 的 D:/DeepLearning/gtsam/vcpkg.json 无条件依赖 pybind11而 vcpkg 的 pybind11 又引入 Python 3.12。即使指定 Conda 3.11CMake 仍会混入 vcpkg 的 python312.dll。由于已经使用-DGTSAM_USE_SYSTEM_PYBINDOFFGTSAM 会使用源码自带的 pybind11因此可以从 vcpkg.json 删除这一行pybind11,然后确认 Conda 3.11 文件完整conda activate vggtslampython --versionTest-Path $env:CONDA_PREFIX\Include\Python.hTest-Path $env:CONDA_PREFIX\libs\python311.libTest-Path $env:CONDA_PREFIX\python311.dll应显示 Python 3.11.x 和三个 True。彻底删除原来的 manifest 安装目录Set-Location D:\DeepLearning\gtsamRemove-Item -LiteralPath build -Recurse -Force重新配置(关闭GTSAM_BUILD_UNSTABLE)$PythonRoot $env:CONDA_PREFIX -replace \\,/cmake -S . -B build -G Visual Studio 17 2022 -A x64 -DCMAKE_TOOLCHAIN_FILED:/vcpkg/scripts/buildsystems/vcpkg.cmake -DCMAKE_INSTALL_PREFIXgtsam_install -DCMAKE_CXX_FLAGS/utf-8 -DGTSAM_BUILD_PYTHONON -DGTSAM_BUILD_UNSTABLEOFF -DGTSAM_UNSTABLE_BUILD_PYTHONON -DGTSAM_USE_SYSTEM_PYBINDOFF -DPython3_EXECUTABLE$PythonRoot/python.exe -DPython3_ROOT_DIR$PythonRoot -DPython3_INCLUDE_DIR$PythonRoot/Include -DPython3_LIBRARY$PythonRoot/libs/python311.lib -DPython3_FIND_STRATEGYLOCATION Found Python3: .../vggtslam/python.exefound version 3.11.15found components: Interpreter Development然后编译安装cmake --build build --config Release --target python-install -j 8验证python -c import gtsam; print(gtsam.__file__)python -c from gtsam import SL4, PriorFactorSL4, BetweenFactorSL4; print(OK)关键点是删除 manifest 中的 pybind11 依赖并清空 build否则 vcpkg 的 Python 3.12 仍会继续污染 Python 3.11 的开发库检 测。在源码的 build 目录中双击打开 GTSAM.sln 文件最好选择 Release 编译右键 gtsam 项目点击属性在C/C - 所有选项里找到将警告视为错误设置为否gtsam_unstable 项目同理右键 gtsam_py 项目点击属性在链接器 - 常规 - 附加库目录中添加 python 路径的libs 文件夹比如我的为D:\local\devel\anaconda3\libs 或者C:\Users\xxx\miniconda3\envs\vggtslam\libsgtsam_unstable_py 项目同理右键并生成项目 gtsam_py可能会报错若有源码路径/build/python/gtsam/Release/gtsam_py.pyd拷贝到源码路径/build/python/gtsam/gtsam_py.pyd右键并生成项目 gtsam_unstable_py可能会报错若有源码路径/build/python/gtsam/Release/gtsam_unstable_py.pyd拷贝到源码路径/build/python/gtsam/gtsam_unstable_py.pyd右键并生成项目 python-install 项目会在C:\Users\用户名\AppData\Roaming\Python\Python312文件夹下安装正常会自动识别该路径下的 gtsam一般会自动找到基本不用担心如果用了venv环境请把C:\Users\用户名\AppData\Roaming\Python\Python312\site-packages文件夹里的所有文件拷到虚拟环境的site-packages中如果出现找不到的情况将site-packages文件夹拷到同样版本的 python 路径下的Lib 文件夹中或者在 python 脚本中添加以下代码import sys sys.path.append(C:\Users\用户名\AppData\Roaming\Python\Python312)2. 确认 unstable 已关闭 Select-String -Path D:\DeepLearning\gtsam\build\CMakeCache.txt -Pattern GTSAM_BUILD_UNSTABLE 应显示 GTSAM_BUILD_UNSTABLE:BOOLOFF 3. 只构建正式 Python 模块 cmake --build D:\DeepLearning\gtsam\build --config Release --target gtsam_py 4. 卸载之前装在用户目录中的版本 C:\Users\icwei\miniconda3\envs\vggtslam\python.exe -m pip uninstall -y gtsam C:\Users\icwei\miniconda3\envs\vggtslam\python.exe -m pip install --no-user --no-deps --force-reinstall D:\DeepLearning\gtsam\build\python 6. 验证安装位置 C:\Users\icwei\miniconda3\envs\vggtslam\python.exe -c import sys,gtsam; print(sys.executable); print(gtsam.__file__) 正确结果应类似 C:\Users\icwei\miniconda3\envs\vggtslam\python.exe C:\Users\icwei\miniconda3\envs\vggtslam\Lib\site-packages\gtsam\__init__.py其他错误1、如果编译报错常量中有换行符那么说明有特殊字符把文件源码路径\wrap\pybind11\include\pybind11\stl_bind.h中第 713 行的代码改成return str(message[slice(0, cut_length, 1)]) str(xxx)特殊字符替换为 xxx2、如果报错无法解析的外部符号 “void __cdecl boost::throw_exception(class std::exception const )”在对应项目的C/C - 命令行中添加/EHscgtsam_py 与 gtsam_unstable_py 项目python-install 完整输出从以下输出里可以看出已经 gtsam python 安装到了C:\Users\azh03\AppData\Roaming\Python\Python3125------ 已启动生成: 项目: python-install, 配置: Debug x64 ------ 51 5DEPRECATION: Loading egg at d:\local\devel\anaconda3\lib\site-packages\scons-4.8.1-py3.12.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330 5Processing d:\users\azh\desktop\gtsam-develop\build\python 5 Preparing metadata (setup.py): started 5 Preparing metadata (setup.py): finished with status done 5Requirement already satisfied: numpy1.11.0 in d:\local\devel\anaconda3\lib\site-packages (from gtsam4.3a1) (1.26.4) 5Collecting pytest9.0.1 (from gtsam4.3a1) 5 Downloading pytest-9.0.2-py3-none-any.whl.metadata (7.6 kB) 5Requirement already satisfied: colorama0.4 in d:\local\devel\anaconda3\lib\site-packages (from pytest9.0.1-gtsam4.3a1) (0.4.6) 5Requirement already satisfied: iniconfig1.0.1 in d:\local\devel\anaconda3\lib\site-packages (from pytest9.0.1-gtsam4.3a1) (1.1.1) 5Requirement already satisfied: packaging22 in d:\local\devel\anaconda3\lib\site-packages (from pytest9.0.1-gtsam4.3a1) (23.2) 5Collecting pluggy2,1.5 (from pytest9.0.1-gtsam4.3a1) 5 Downloading pluggy-1.6.0-py3-none-any.whl.metadata (4.8 kB) 5Requirement already satisfied: pygments2.7.2 in d:\local\devel\anaconda3\lib\site-packages (from pytest9.0.1-gtsam4.3a1) (2.15.1) 5Downloading pytest-9.0.2-py3-none-any.whl (374 kB) 5 --------------------------------------- 374.8/374.8 kB 27.8 kB/s eta 0:00:00 5Downloading pluggy-1.6.0-py3-none-any.whl (20 kB) 5Building wheels for collected packages: gtsam 5 Building wheel for gtsam (setup.py): started 5 Building wheel for gtsam (setup.py): finished with status done 5 Created wheel for gtsam: filenamegtsam-4.3a1-cp312-cp312-win_amd64.whl size80499728 sha256f9e6b5c604e28e14e8d0bfe8c0b8563fc0502dccb217c17f07d6ec107f2977f4 5 Stored in directory: C:\Users\azh03\AppData\Local\Temp\pip-ephem-wheel-cache-qdfawjqj\wheels\2b\37\ed\1a27eed30b413a1c4adf86db3577b4ae90725533fa7771ccdc 5Successfully built gtsam 5Installing collected packages: pluggy, pytest, gtsam 5CUSTOMBUILD : warning : The scripts py.test.exe and pytest.exe are installed in C:\Users\azh03\AppData\Roaming\Python\Python312\Scripts which is not on PATH. 5 Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location. 5Successfully installed gtsam-4.3a1 pluggy-1.6.0 pytest-9.0.2 5Building Custom Rule D:/Users/azh/Desktop/gtsam-develop/python/CMakeLists.txt

相关新闻

vmware关掉上面条条

vmware关掉上面条条

View->Exclusive Mode Enter Exclusive mode? To leave Exclusive mode, press the CtrlAlt key combination.

2026/10/14 18:22:17 阅读更多 →
什么是域名委托购买?有哪些注意事项?

什么是域名委托购买?有哪些注意事项?

一、什么是域名委托购买?域名委托购买是指您向专业的域名代购公司委托购买特定的域名。这种服务通常是针对那些希望购买高价值域名的客户,因为这些域名可能需要通过复杂的交易过程才能得到。二、域名委托购买常见问题1、为什么要选择域名委托购买&#x…

2026/10/4 6:26:23 阅读更多 →
微软官方Windows优化工具全指南

微软官方Windows优化工具全指南

1. 微软官方工具的价值与定位 Windows系统长期使用后出现卡顿是个老生常谈的问题,但很多人不知道微软其实提供了一系列官方优化工具。这些工具通常体积小巧(200MB左右)、完全免费且无第三方软件的兼容性风险。不同于市面上那些"一键加速…

2026/10/12 15:40:10 阅读更多 →

最新新闻

Kiln AI Server Python 客户端库使用指南:同步/异步 API 调用与高级定制实战

Kiln AI Server Python 客户端库使用指南:同步/异步 API 调用与高级定制实战

人工智能AI 应用AI 评测RAG微调提示工程开发工具桌面应用 【免费下载链接】Kiln Build, Evaluate, and Optimize AI Systems. Includes evals, RAG, agents, fine-tuning, synthetic data generation, dataset management, MCP, and more. 项目地址: https://gitcod…

2026/10/14 18:22:46 阅读更多 →
鸿蒙应用内添加服务卡片到桌面:权限配置至formId管理的完整实践

鸿蒙应用内添加服务卡片到桌面:权限配置至formId管理的完整实践

前两天有个开发者在我写的卡片文章下面留言:应用里能不能直接触发“添加卡片到桌面”?用户根本不知道要长按桌面再选卡片,好多功能做出来都没人发现。这个问题其实问的人挺多的。鸿蒙的服务卡片虽然好用,但系统默认的添加路径藏在…

2026/10/14 18:22:46 阅读更多 →
自制轻量级单片机UI框架:低资源平台的架构设计与内存优化

自制轻量级单片机UI框架:低资源平台的架构设计与内存优化

我最早动起"自制轻量级单片机UI框架"这个念头,是在一个被现成UI库逼疯的下午。手里这块板子的MCU只给了64KB Flash和16KB RAM,产品需求却要一个带按钮、进度条和多级菜单的界面。我试着把一个开源UI库编进去,编译完一看&#xff0c…

2026/10/14 18:22:46 阅读更多 →
51单片机红外遥控NEC解码与波形显示方案

51单片机红外遥控NEC解码与波形显示方案

简介:这是一套基于51单片机的红外遥控解码与波形显示项目资料,面向电子爱好者、嵌入式初学者以及单片机课程设计/毕业设计人群,解决从红外信号接收、脉冲解码到LCD波形显示的全流程实现问题。压缩包共38个文件、9.68MB,涵盖C语言源…

2026/10/14 18:22:46 阅读更多 →
uIP TCP/IP协议栈实战:从Client到Server的嵌入式移植全解析

uIP TCP/IP协议栈实战:从Client到Server的嵌入式移植全解析

简介:基于uIP协议栈的TCP客户端与服务器程序,源自ALIENTEK战舰STM32开发板第52章,面向使用STM32与ENC28J60进行嵌入式网络通信的开发者。资源包含完整工程与配套文档,共223个文件,以C语言源文件(76个.c&…

2026/10/14 18:22:46 阅读更多 →
JavaScript sort排序原理与常见陷阱解析

JavaScript sort排序原理与常见陷阱解析

先说个我自己的真实经历。有次帮同事排查一个列表排序问题,数据是几组数字,他写了 arr.sort() ,结果排出来是 [1, 10, 2, 22, 3] 这种完全看不懂的顺序。他盯着屏幕看了半天,第一反应是"sort排序坏了"。其实不是坏了…

2026/10/14 18:21:46 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →