Python 使用boost::numpy::ndarray时出现分段错误

Python 使用boost::numpy::ndarray时出现分段错误,python,c++,boost,numpy,Python,C++,Boost,Numpy,当我试图将boost::numpy::ndarray作为参数传递时,我发现了一个奇怪的seg错误: #include <iostream> #include <boost/python.hpp> #include <boost/numpy.hpp> void say_hello(boost::numpy::ndarray& my_array) //void say_hello(int x) This works fine { std::cout

当我试图将
boost::numpy::ndarray
作为参数传递时,我发现了一个奇怪的seg错误:

#include <iostream>
#include <boost/python.hpp>
#include <boost/numpy.hpp>


void say_hello(boost::numpy::ndarray& my_array)
//void say_hello(int x) This works fine
{
  std::cout<<"Hello"<<std::endl;
}

BOOST_PYTHON_MODULE(hello_ext)
{
    using namespace boost::python;
    def("say_hello", say_hello);

}
我的生成文件:

PYTHON_VERSION = 2.7
PYTHON_INCLUDE = /usr/include/python$(PYTHON_VERSION)


BOOST_INC = /usr/include
BOOST_LIB = /usr/lib

TARGET = hello_ext

$(TARGET).so: $(TARGET).o
    g++ -std=c++11 -shared -Wl,--export-dynamic $(TARGET).o -L$(BOOST_LIB) -lboost_python -lboost_numpy -L/usr/lib/python$(PYTHON_VERSION)/config -lpython$(PYTHON_VERSION) -o $(TARGET).so

$(TARGET).o: $(TARGET).cpp
    g++ -std=c++11 -I$(PYTHON_INCLUDE) -I$(BOOST_INC) -fPIC -c $(TARGET).cp

我知道这很简单。我需要添加这两行:

Py_Initialize();
boost::numpy::initialize();
如上所述:如果未运行上述线路,则在尝试使用
boost::numpy::ndarray
后会导致seg故障

因此:我的文件变成:

#include <iostream>
#include <boost/python.hpp>
#include <boost/numpy.hpp>


void say_hello(boost::numpy::ndarray& my_array)
//void say_hello(int x) This works fine
{
  std::cout<<"Hello"<<std::endl;
}

BOOST_PYTHON_MODULE(hello_ext)
{
    using namespace boost::python;
    Py_Initialize();
    boost::numpy::initialize();
    def("say_hello", say_hello);
}
#包括
#包括
#包括
void say_hello(boost::numpy::ndarray和my_数组)
//void say_hello(int x)这很好用
{

Std::在链接示例中,初始化是在C++ <代码>()//>代码中完成的。这里,我们是在Python模块中。非常感谢!这是GDB甚至不能帮助的一种神秘的Sebug。
#include <iostream>
#include <boost/python.hpp>
#include <boost/numpy.hpp>


void say_hello(boost::numpy::ndarray& my_array)
//void say_hello(int x) This works fine
{
  std::cout<<"Hello"<<std::endl;
}

BOOST_PYTHON_MODULE(hello_ext)
{
    using namespace boost::python;
    Py_Initialize();
    boost::numpy::initialize();
    def("say_hello", say_hello);
}