我试图使用C扩展名文件构建共享库,但首先必须使用以下命令生成输出文件:
gcc -Wall utilsmodule.c -o Utilc
执行命令后,我收到以下错误消息:
> utilsmodule.c:1:20: fatal error: Python.h: No such file or directory
compilation terminated.
我已经在互联网上尝试了所有建议的解决方案,但问题仍然存在。我对Python.h没有问题。我设法在我的机器上找到了该文件。
我试图使用C扩展名文件构建共享库,但首先必须使用以下命令生成输出文件:
gcc -Wall utilsmodule.c -o Utilc
执行命令后,我收到以下错误消息:
> utilsmodule.c:1:20: fatal error: Python.h: No such file or directory
compilation terminated.
我已经在互联网上尝试了所有建议的解决方案,但问题仍然存在。我对Python.h没有问题。我设法在我的机器上找到了该文件。
当前回答
若您使用cmake构建项目,可以使用这个示例。
cmake_minimum_required(VERSION 2.6)
project(demo)
find_package(PythonLibs REQUIRED)
include_directories(${PYTHON_INCLUDE_DIRS})
add_executable(demo main.cpp)
target_link_libraries(demo ${PYTHON_LIBRARIES})
其他回答
这不是同一种情况,但它也适用于我,现在我可以在Python3.5中使用SWIG:
我试图编译:
gcc -fPIC -c existe.c existe_wrap.c -I /usr/include/python3.5m/
使用Python 2.7可以很好地工作,而不是使用我的3.5版本:
exist_wrap.c:147:21:致命错误:Python.h:不存在el archivo o eldirectorio编译已终止。
在Ubuntu 16.04安装中运行后:
sudo apt-get install python3-dev # for python3.x installs
现在我可以毫无问题地编译Python3.5:
gcc -fPIC -c existe.c existe_wrap.c -I /usr/include/python3.5m/
特别是对于Python 3.7和Ubuntu,我需要
sudo apt安装libpython3.7-dev
.我想在某些时候,名字从pythom.n-dev改成了这个。
对于Python 3.6、3.8到3.10(以及计数…),类似地:
sudo apt安装libpython3.6-dev
sudo apt安装libpython3.8-dev
sudo apt安装libpython3.9-dev
sudo apt安装libpython3.10-dev
对于OpenSuse的同志们:
sudo zypper install python3-devel
Cygwin解决方案
您需要安装python2-devel或python3-devel包,具体取决于您使用的Python版本。
您可以使用Cygwin.com上的32位或64位setup.exe(取决于您的安装)快速安装它。
示例(如果需要,请修改setup.exe的文件名和Python的主要版本):
$ setup.exe -q --packages=python3-devel
您还可以查看我的另一个答案,以获得从命令行安装Cygwin软件包的更多选项。
确保Python开发文件随操作系统一起提供。
您不应该硬编码库和包含路径。相反,使用pkg配置,它将为您的特定系统输出正确的选项:
$ pkg-config --cflags --libs python2
-I/usr/include/python2.7 -lpython2.7
您可以将其添加到gcc行:
gcc -Wall utilsmodule.c -o Utilc $(pkg-config --cflags --libs python2)