当前位置: 首页>>技术教程>>正文


Ubuntu-链接boost.python-致命错误:找不到pyconfig

, , , ,

问题描述

遇到一些问题,现在我阅读以下内容:

hello world python extension in c++ using boost?

我尝试将boost安装到我的桌面上,并按照链接方面的建议完成操作。我有以下代码:

#include <boost/python.hpp>
#include <Python.h>
using namespace boost::python;

现在,我尝试与以下链接:

g++ testing.cpp -I /usr/include/python2.7/pyconfig.h -L /usr/include/python2.7/Python.h
-lpython2.7

我也尝试了以下方法:

g++ testing.cpp -I /home/username/python/include/ -L /usr/include/python2.7/Python.h -lpython2.7

我不断收到以下错误:

/usr/include/boost/python/detail/wrap_python.hpp:50:23: fatal error: pyconfig.h: No such   
file or directory
# include <pyconfig.h>

我不知道我要去哪里错了。我确实安装了boost.python,但是链接有问题吗?

最佳办法

我只是有同样的错误,问题是g ++找不到pyconfig.h(令人震惊,我知道)。对我来说,此文件位于/usr/include/python2.7/pyconfig.h中,因此附加-I /usr/include/python2.7/应该可以解决该问题,或者您可以使用以下方式将目录添加到路径中:

export CPLUS_INCLUDE_PATH="$CPLUS_INCLUDE_PATH:/usr/include/python2.7/"

您也可以将其添加到.bashrc中,并在下次启动shell时将其添加(必须重新打开终端以实现更改)。

您可以使用find /usr/include -name pyconfig.h找到自己的python包含路径,在我的情况下,这将返回:

/usr/include/python2.7/pyconfig.h
/usr/include/i386-linux-gnu/python2.7/pyconfig.h

次佳办法

出现此现象的可能原因有两个:1.您没有安装python-dev。 2.您已安装python-dev,并且您的包含路径配置不正确,以上发布提供了解决方案。就我而言,我正在安装boost,它正在寻找ubuntu中缺少的pyconfig.h头文件:

解决方法是

apt-get install python-dev

在其他Linux版本中,您必须弄清楚如何安装python标头。

第三种办法

如果您有一个.c文件(hello.c),并且想要构建一个libhello.so库,请尝试:

find /usr/include -name pyconfig.h

[出]:

/usr/include/python2.7/pyconfig.h
/usr/include/x86_64-linux-gnu/python2.7/pyconfig.h

然后使用输出并执行:

gcc -shared -o libhello.so -fPIC hello.c -I /usr/include/python2.7/

如果您要从cython的.pyx转换为.so,请尝试使用以下python模块,给定.pyx文件,它将自动构建.so文件:

def pythonizing_cython(pyxfile):
    import os
    # Creates ssetup_pyx.py file.
    setup_py = "\n".join(["from distutils.core import setup",
                          "from Cython.Build import cythonize",
                          "setup(ext_modules = cythonize('"+\
                          pyxfile+".pyx'))"])   

    with open('setup_pyx.py', 'w') as fout:
        fout.write(setup_py)

    # Compiles the .c file from .pyx file.
    os.system('python setup_pyx.py build_ext --inplace')

    # Finds the pyconfig.h file.
    pyconfig = os.popen('find /usr/include -name pyconfig.h'\
                        ).readline().rpartition('/')[0]

    # Builds the .so file.
    cmd = " ".join(["gcc -shared -o", pyxfile+".so",
                    "-fPIC", pyxfile+".c",
                    "-I", pyconfig])
    os.system(cmd)

    # Removing temporary .c and setup_pyx.py files.
    os.remove('setup_pyx.py')
    os.remove(pyxfile+'.c')

第四种办法

构建centos7的提升时,我也有类似的经历。我在系统上只能找到pyconfig-64.h找不到pyconfig.h。

搜索后,我发现您需要安装python-devel以获得pyconfig.h

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/9263.html,未经允许,请勿转载。