![](/img/trans.png)
[英]Compile Error while building CPP with Pybind11 for Python in Visual Studio 2017
[英]building cpp with pybind11
我是 pybind(也是 C++)的新手。 我正在尝试遵循 pybind https://pybind11.readthedocs.io/en/stable/basics.html上的教程,但我在构建它时遇到了麻烦。 我在桌面上有一个文件夹,里面有这个结构:
.
├── file.txt
├── include
│ └── pybind11
│ ├── attr.h
│ ├── buffer_info.h
│ ├── cast.h
│ ├── chrono.h
│ ├── common.h
│ ├── complex.h
│ ├── detail
│ │ ├── class.h
│ │ ├── common.h
│ │ ├── descr.h
│ │ ├── init.h
│ │ ├── internals.h
│ │ └── typeid.h
│ ├── eigen.h
│ ├── embed.h
│ ├── eval.h
│ ├── functional.h
│ ├── iostream.h
│ ├── numpy.h
│ ├── operators.h
│ ├── options.h
│ ├── pybind11.h
│ ├── pytypes.h
│ ├── stl_bind.h
│ └── stl.h
├── prova.cpp
└── share
└── cmake
└── pybind11
├── FindPythonLibsNew.cmake
├── pybind11Config.cmake
├── pybind11ConfigVersion.cmake
├── pybind11Targets.cmake
└── pybind11Tools.cmake
6 directories, 31 files
我的文件 prova.cpp 如下:
#include <pybind11/pybind11.h>
namespace py = pybind11;
int add(int i, int j) {
return i+j;
}
PYBIND11_MODULE(prova, m) {
m.def("add", &add, "A function which add two numbers");
}
现在,在教程中,他们说使用以下命令构建文件:
c++ -O3 -Wall -shared -std=c++11 -fPIC `python3 -m pybind11 --includes` example.cpp -o example`python3-config --extension-suffix`
但我得到了这个 output:
c++: error: python3 -m pybind11 --includes: No such file or directory
现在,我通过 conda 安装了 python,并且我有一个需要所有 package 的环境。 如果我在命令提示符下运行命令 python3 -m pybind11 --includes 我得到了这个 output:
-I/home/luca/Programs/miniconda3/envs/fcg/include/python3.7m -I/home/luca/Programs/miniconda3/envs/fcg/lib/python3.7/site-packages/pybind11/include
显然,我必须在正确的 conda 环境中。 因此,如果 c++ 无法使用正确的 conda 环境,我会措辞。 但是,即使我替换 output 我直接在 c++ 命令中得到,所以运行:
c++ -O3 -Wall -shared -std=c++11 -fPIC '-I/home/luca/Programs/miniconda3/envs/fcg/include/python3.7m -I/home/luca/Programs/miniconda3/envs/fcg/lib/python3.7/site-packages/pybind11/include' prova.cpp -o prova'python3-config --extension-suffix'
我得到了另一个 output:
prova.cpp:1:10: fatal error: pybind11/pybind11.h: No such file or directory
#include <pybind11/pybind11.h>
^~~~~~~~~~~~~~~~~~~~~
compilation terminated.
我真的不知道如何解决它。 感谢那些可以提供帮助的人:)
您需要在 c++ 行的前面附近包含 -I“包含 pybind11.h 文件的文件夹 pybind11 的路径”。
-I"path" 告诉编译器在哪里可以找到 header。
第一步:找到pybuild11包含文件的位置:
$ python3.8 -c "import pybind11;print(pybind11.get_include())"
/usr/local/lib/python3.8/site-packages/pybind11/include
第 2 步:添加路径以包含编译命令:
$ c++ ...[bunch of stuff]... -I '/usr/local/lib/python3.8/site-packages/pybind11/include' ...[bunch of stuff]...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.