簡體   English   中英

使用boost :: numpy :: ndarray時出現分段錯誤

[英]Segmentation fault when using boost::numpy::ndarray

當我試圖將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);

}

我知道這個例子很愚蠢,但我不應該在那里遇到一個seg錯誤,這是我能夠將問題減少的最小例子。 也許我需要指定ndarray類型或維數,但我找不到任何文檔。 我在看這個 ,但似乎沒有什么幫助。 我的直覺是我錯過了一些簡單的東西,但我只是看不到它。

當我運行這個:

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)

我的Makefile:

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

正如所解釋的: 這里的 seg fault結果在任何嘗試使用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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM