Tôi nhận được những gì tôi nghĩ là một lỗi seg lạ khi tôi đang cố gắng để vượt qua boost::numpy::ndarray
như một cuộc tranh cãi:Segmentation lỗi khi sử dụng tăng :: 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);
}
Tôi biết ví dụ này là ngớ ngẩn, nhưng tôi không nên nhận được một lỗi seg ở đó, và đây là ví dụ nhỏ nhất tôi đã có thể làm giảm vấn đề. Có lẽ tôi cần phải chỉ định loại ndarray
hoặc số thứ nguyên, nhưng tôi không thể tìm thấy bất kỳ tài liệu nào về nó. Tôi đang xem this, nhưng có vẻ như không hữu ích lắm. Cảm giác ruột của tôi là tôi thiếu cái gì đó đơn giản, nhưng tôi không thấy nó.
Khi tôi chạy này:
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 của tôi:
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
Nhưng trong ví dụ liên kết, các initialisation được thực hiện trong một C++ 'main() '. Ở đây, chúng ta đang ở trong một mô-đun python. – Walter