You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用pybind11正确编译C++代码?VS2017配置及编译产物疑问

解决pybind11 + VS + Anaconda 模块导入问题

首先明确核心问题:你需要生成的是DLL文件(Windows下要重命名为.pyd),而不是.obj文件。.obj只是编译过程中的中间产物,Python完全无法识别它作为模块导入。

接下来针对你的VS+Anaconda环境,补充这些关键配置步骤:

1. 把VS项目改成动态链接库(DLL)类型

你当前的项目可能是控制台或其他类型,需要调整:

  • 右键项目 → 属性 → 配置属性 → 常规 → 项目默认值 → 配置类型,选择「动态库(.dll)」

2. 绑定Anaconda环境的Python头文件和库

因为你用的是独立的Anaconda环境,VS默认不会识别它,得手动指定路径:

  • 包含目录:添加Anaconda环境下的include文件夹,比如C:\Users\你的用户名\anaconda3\envs\你的环境名\include
  • 库目录:添加Anaconda环境下的libs文件夹,比如C:\Users\你的用户名\anaconda3\envs\你的环境名\libs(里面有对应版本的pythonXX.lib,比如Python3.10就是python310.lib)

3. 配置链接器依赖

  • 右键项目 → 属性 → 配置属性 → 链接器 → 输入 → 附加依赖项,添加对应的pythonXX.lib(比如python310.lib),确保版本和你的Anaconda环境完全匹配

4. 输出文件改为.pyd格式

Windows下Python的扩展模块要求后缀是.pyd(本质是特殊的DLL):

  • 方法一:编译完成后手动把生成的example.dll改名为example.pyd
  • 方法二:在VS里直接设置输出名:配置属性 → 链接器 → 常规 → 输出文件,修改为$(OutDir)\example.pyd

5. 确认架构完全匹配

你已经设置了x64,要确保你的Anaconda环境也是64位的:

  • 打开Anaconda Prompt,激活你的环境后输入:
    python -c "import sys; print(sys.maxsize > 2**32)"
    
    返回True就是64位,和你的VS编译架构一致才可以正常导入

6. 确保模块在Python搜索路径中

把生成的example.pyd放到Python能找到的位置:

  • 最简单的方法是放到Anaconda环境的site-packages文件夹里
  • 或者在Python脚本里临时添加路径:
    import sys
    sys.path.append("你的pyd文件所在的绝对路径")
    import example
    

额外注意事项

  • 保持用Release模式编译:Debug模式的Python库和Release不兼容,你当前的选择是对的
  • 确保pybind11的版本和Python版本兼容,尽量使用最新版的pybind11
  • 如果遇到链接错误,检查pybind11的头文件路径是否正确添加,或者Python库的路径有没有写错

内容的提问来源于stack exchange,提问作者aditya sista

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 03:59:52