python - 如何使用 pybind11 正确编译 c++ 代码
问题描述
我有以下带有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 标头。
- 我将目标设置为 x64 并发布
- 我只是编译了文件,它在发布目录中创建了一个对象“example.obj”
- 我在 pythonpath 中包含的目录中添加了目标文件
- 在 python 中尝试导入示例,它没有给出名为示例的模块错误
pybind11中的文档没有指定编译器应该生成哪些文件类型,它应该是库文件还是dll?除此之外,还有什么特殊的步骤需要遵循吗?
解决方案
我想回应@pschill 的回答:
首先尝试使用受支持/记录在案的构建工具链,然后尝试在人迹罕至的地方做一些事情:
https://pybind11.readthedocs.io/en/master/compiling.html
我建议您使用 CMake,尝试您的示例代码的子集,然后使用详细选项(例如make VERBOSE=1
)构建您的库,以查看添加的内容以及如何生成目标。
如果您仍想保留非 CMake 工作流程,则可以将相关标志移植到 VS2017。
(话虽如此,CMake 可能有生成 VS2017 项目文件的选项。)
推荐阅读
- flutter - Flutter - 如果我添加了很多文本而不是它的长度,为什么我的文本会消失
- java - JDK 中已弃用的内容
- java - 使用Java中的OpenPDF居中/对齐表格单元格中的文本
- r - 如何重新排序一年中的某一天以使季节对齐
- linux - 在 0766 目录中创建文件失败
- firebase - 如何根据数组中的多个值过滤快照流?
- c# - C#中GPU上的碰撞检测
- python - 如何查询芹菜任务的状态
- python - Pandas 将 Excel 工作表读取为 csv
- ruby-on-rails - 如何在 webhook 上使用 intuit webhook 验证器令牌