Ubuntu - Linking boost.python - Fatal error: pyconfig cannot be found

后端 未结 7 800
走了就别回头了
走了就别回头了 2020-12-08 04:28

Having some issues, now I have read the following:

hello world python extension in c++ using boost?

I have tried installing boost onto my desktop, and, done

相关标签:
7条回答
  • 2020-12-08 04:58

    If you have a .c file (hello.c) and you want to build an libhello.so library, try:

    find /usr/include -name pyconfig.h
    

    [out]:

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

    then use the output and do:

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

    If you're converting from cython's .pyx to .so, try this python module, it will automatically build the .so file given the .pyx file:

    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')
    
    0 讨论(0)
提交回复
热议问题