gpt4 book ai didi

python - 使用 boost::numpy::ndarray 时出现段错误

转载 作者:太空狗 更新时间:2023-10-29 21:01:00 25 4
gpt4 key购买 nike

当我尝试将 boost::numpy::ndarray 作为参数传递时,我得到了一个我认为是奇怪的段错误:

#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);

}

我知道这个例子很愚蠢,但我不应该在那里遇到段错误,这是我能够将问题减少到的最小的例子。也许我需要指定 ndarray 类型或维数,但我找不到任何相关文档。我在看this ,但它似乎没有太大帮助。我的直觉是我错过了一些简单的东西,但我就是没有看到。

当我运行这个时:

In [1]: from hello_ext import *

In [2]: import numpy as np

In [3]: say_hello(np.array([3,4,5]))
Segmentation fault (core dumped)

我的生成文件:

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();

如前所述:here如果未运行上述行,则在尝试使用 boost::numpy::ndarray 后会出现段错误结果。

因此:我的文件变成:

#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);
}

关于python - 使用 boost::numpy::ndarray 时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24719262/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com