我从pybind11
开始,尝试编译第一个示例。我使用的是XUbuntu 20.04。我的系统python是3.8,但我仅为python 3.10安装了pybind11
,这是我在命令提示符下键入python
时执行的版本。当我运行pybind11
文档中给出的编译命令时:
c++ -O3 -Wall -shared -std=c++11 -fPIC $(python3.10 -m pybind11 --includes) example.cpp -o example$(python3.10-config --extension-suffix)
我收到错误消息:
fatal error: Python.h: No such file or directory
213 | #include <Python.h>
我遵循了对致命错误的公认答案中给出的建议:Python。h: 没有这样的文件或目录,并运行
sudo apt install python3.10-dev
但这没有任何效果,即使是Python。h现在存在于usr/include/python3.10中。我也许应该提到,目前我没有使用虚拟环境。
编辑
python3.10-config --cflags
-I/usr/include/python3.10 -I/usr/include/python3.10 -Wno-unused-result -Wsign-compare -g -fstack-protector-strong -Wformat -Werror=format-security -DNDEBUG -g -fwrapv -O2 -Wall
编辑
我按照9769953的建议更改了命令:
Pybind11Test$ c++ -O3 -Wall -shared -std=c++11 -fPIC $(python3.10 -m pybind11 python3.10-config --includes) example.cpp -o example$(python3.10-config --extension-suffix)
usage: __main__.py [-h] [--includes] [--cmakedir]
__main__.py: error: unrecognized arguments: python3.10-config
example.cpp:1:10: fatal error: pybind11/pybind11.h: No such file or directory
1 | #include <pybind11/pybind11.h>
| ^~~~~~~~~~~~~~~~~~~~~
compilation terminated.
添加python3.10-config给了我一个无法识别的参数错误,但是编译在另一个地方失败了<代码>#包括
文件存在于
/home/saul/.local/lib/python3.10/site-packages/pybind11/include/pybind11/pybind11.h
编辑
最新尝试
Pybind11Test$ c++ -O3 -Wall -shared -std=c++11 -fPIC $(python3.10 -m pybind11 --includes) example.cpp -o example.out
In file included from /home/saul/.local/lib/python3.10/site-packages/pybind11/include/pybind11/detail/../cast.h:13,
from /home/saul/.local/lib/python3.10/site-packages/pybind11/include/pybind11/detail/../attr.h:13,
from /home/saul/.local/lib/python3.10/site-packages/pybind11/include/pybind11/detail/class.h:12,
from /home/saul/.local/lib/python3.10/site-packages/pybind11/include/pybind11/pybind11.h:13,
from example.cpp:1:
/home/saul/.local/lib/python3.10/site-packages/pybind11/include/pybind11/detail/../detail/common.h:213:10: fatal error: Python.h: No such file or directory
213 | #include <Python.h>
| ^~~~~~~~~~
compilation terminated.
问题是操作系统在usr/include/python3.10/include中安装了Python 3.10的头文件。如果还安装了开发包(否则,一组文件将覆盖另一组文件),这将使它们与默认的系统Python(3.8)分离。
但是/usr/include/python3.10/include
不在C编译器的默认搜索路径中;您必须添加它。您可以手动执行此操作,但python-config
工具通常会(更好地)处理它。添加
python3.10-config --includes
作为子shell命令($(…)
)到命令行。与pybind的功能类似,使用
$(python-m pybind-includes)让编译器查找pybind的includes文件<很明显,需要使用正确的python配置变量,因此python3.10-config。
共享库文件较少,并且通过文件名中包含Python版本来命名,因此这些文件都可以安全地存在于/usr/lib/x86_64-linux-gnu/
中。您会在该目录中找到libpython3.8.so
和libpython3.10.so
彼此相邻。因此无需html" target="_blank">添加库搜索路径(python-config
甚至不存在该选项,但它包含在python3.10-config--ld
中)。
总而言之,该命令将如下所示:
c++ -O3 -Wall -shared -std=c++11 -fPIC \
$(python3.10-config --includes) \
$(python3.10 -m pybind11 --includes) \
-o example$(python3.10-config --extension-suffix) \
example.cpp
(为了便于阅读,在几行之间断开。)
问题内容: 我正在尝试使用C扩展文件构建共享库,但首先我必须使用以下命令生成输出文件: 执行命令后,我得到以下错误消息: :致命错误:Python.h:没有此类文件或目录编译终止。 实际上我已经尝试了所有建议的解决方案,但是问题仍然存在…我也没有问题。我设法在我的机器上找到该文件……以前有人遇到过同样的问题吗?? 问题答案: 看来你尚未正确安装python dev的标头文件和静态库。使用软件包管理
我正在尝试使用C扩展文件构建一个共享库,但首先我必须使用下面的命令生成输出文件: 执行该命令后,我得到以下错误消息: 我已经尝试了所有建议的解决方案通过互联网,但问题仍然存在。我对没有任何问题。我设法在我的机器上找到了文件。
如何解决这个问题??Python安装在错误的目录中吗?
问题内容: 我最近在运行Ubuntu 12.04 LTS的Macbook Pro上安装了用于C ++开发的KDevelop 4。 我想在我的C ++代码中嵌入Python应用程序。为此,需要包含Python.h头文件。所以,我做到了。 但是,在运行时,我从IDE收到以下响应: 但是,我很快就发现了问题。我还没有下载python- dev软件包。所以,我做到了。我又跑了一次,但同样的错误又出现了。因
我用的是Centos7。在运行Python 3.5(最新稳定版本)的虚拟环境中,我尝试使用pip3/pip/easy_install安装psycopg2。 在所有情况下,我都会得到以下错误: 致命错误:python.h:没有这样的文件或目录
问题内容: 我刚安装完Ubuntu 13.10。 我想尝试Phalcon,并且在构建源代码(phalcon.so)时出现以下错误: 我安装的灯是: 须藤apt-get install -y apache2 php5 mysql-server libapache2-mod-php5 php5-mysql php5-curl php5-imagick php5-mcrypt php5-memcache