Я работаю над обработчиком лидарных данных в реальном времени для симулятора, написанного на python. Поскольку объем данных огромен, я действительно нуждаюсь в производительности c / c ++. Поэтому я нашел Cython, и он выглядел невероятно, за исключением того факта, что он не может включать библиотеку pcl во время компиляции.
Поэтому я подумал собрать свой .so-файл, связав pcl самостоятельно, а затем вызвать библиотека в оболочке Python, но по-прежнему никаких результатов. Вот мой setup.py и мой .pyx
Setup.py:
#!/usr/bin/env python
import sys
import os
import shutil
from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
import numpy
setup(cmdclass = {'build_ext': build_ext},
ext_modules = [Extension("multiply",
sources=["cythonBridge.pyx", "Monitor.cpp"],
libraries=["myLib"],
language="c++",
include_dirs=[numpy.get_include()])],
)
cythonBridge.pyx:
#distutils: language = c++
"""
multiply.pyx
simple cython test of accessing a numpy array's data
the C function: c_multiply multiplies all the values in a 2-d array by a scalar, in place.
"""
import cython
# import both numpy and the Cython declarations for numpy
import numpy as np
cimport numpy as np
# declare the interface to the C code
cdef extern void c_multiply (double* array, double value, int m, int n)
@cython.boundscheck(False)
@cython.wraparound(False)
def multiply(np.ndarray[double, ndim=2, mode="c"] input not None, double value):
"""
multiply (arr, value)
Takes a numpy array as input, and multiplies each element by value, in place
param: array -- a 2-d numpy array of np.float64
param: value -- a number that will be multiplied by each element in the array
"""
cdef int m, n
m, n = input.shape[0], input.shape[1]
c_multiply (&input[0,0], value, m, n)
return None
ОШИБКА LOG (при вызове python setup.py установить):
gcc -pthread -B /home/francesco/anaconda3/envs/carla/compiler_compat -Wl,--sysroot=/ -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/home/francesco/anaconda3/envs/carla/lib/python3.6/site-packages/numpy/core/include -I/home/francesco/anaconda3/envs/carla/include/python3.6m -c Monitor.cpp -o build/temp.linux-x86_64-3.6/Monitor.o
cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C++
In file included from Monitor.cpp:13:0:
myLib.h:4:10: fatal error: pcl/io/pcd_io.h: No such file or directory
#include <pcl/io/pcd_io.h>
^~~~~~~~~~~~~~~~~
compilation terminated.