python - 如何使用 pybind11 正确编译 c++ 代码

标签 python c++ pybind11

我有以下带有pybind11的基本cpp代码:

#include "pch.h"
#include <pybind11/pybind11.h>

int add(int i, int j) {
    return i + j;
}

PYBIND11_MODULE(example, m) {
    m.doc() = "pybind11 example plugin"; // optional module docstring

    m.def("add", &add, "A function which adds two numbers");
}

这是我遵循的步骤(我使用的是没有 python 模块的 Visual Studio 17,我在 anaconda envs 中有单独的 python):
  • 我在项目的附加包含目录中手动添加了 pybind11 header 。
  • 我将目标设置为 x64 并发布
  • 我只是编译了文件,它在发布目录
  • 中创建了一个对象“example.obj”
  • 我在 pythonpath
  • 中包含的目录中添加了目标文件
  • 尝试在 python 中导入示例,它没有给出名为示例的模块错误

  • pybind11 中的文档没有指定编译器应该生成哪些文件类型,它应该是库文件还是 dll?除此以外,还有什么特殊的步骤需要遵循吗?

    最佳答案

    我想回应@pschill 的回答:

    首先尝试使用受支持/记录在案的构建工具链,然后尝试在人迹罕至的地方做一些事情:

    https://pybind11.readthedocs.io/en/master/compiling.html

    我建议您使用 CMake,尝试您的示例代码的子集,然后使用详细选项(例如 make VERBOSE=1)构建您的库,以查看添加的内容以及如何生成目标。

    如果您仍想保留非 CMake 工作流程,则可以将相关标志移植到 VS2017。

    (话虽如此,CMake 可能有生成 VS2017 项目文件的选项。)

    关于python - 如何使用 pybind11 正确编译 c++ 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54908007/

    相关文章:

    php - 实现 Comet 服务器端后端的最简单方法是什么?

    c++ - 如何为 boolinq 实现 First 和 FirstOrDefault?

    c++ - 如何通过对C函数和类对象的外部调用来处理C++头文件

    c++ - 为什么没有 2 字节 float 并且已经存在实现?

    python - pybind module.obj : error LNK2001: unresolved external symbol

    python - 在 Windows 上用 Python 演示多核加速的一些示例代码是什么?

    python - 使用 CSV 文件读写 NumPy 数组字典

    python - 属性错误: module 'selenium.webdriver.common.by' has no attribute 'XPATH' using Selenium Python

    c++ - Pybind11:如何为结构成员变量分配默认值?

    python - 通过 pybind11 迭代在 Python 中包装的 C++ 对象