Я написал небольшой пример, чтобы показать, что происходит.
my_test.cpp
#include <iostream>
#include <boost/python/numpy.hpp>
namespace np = boost::python::numpy;
int my_Foo()
{
Py_Initialize();
np::initialize();
std::cout << "hello\n";
return 0;
}
BOOST_PYTHON_MODULE(my_test)
{
using namespace boost::python;
def("my_Foo", my_Foo);
}
py_test.py
import my_test as t
t.my_Foo();
Я все компилирую командой:
g++ -shared -fPIC -o my_test.so my_test.cpp -lboost_python -lpython2.7 -I/usr/include/python2.7
И я получаю эту ошибку:
ImportError: /home/my_test.so: undefined symbol: _ZN5boost6python5numpy10initializeEb
И это работает, когда я комментирую эту строку
//np::initialize();
Понятия не имею, как это исправить. Я читал похожие вопросы на форуме, но ни одно из решений не помогло мне. Я пробовал обновить boost, обновить python, связать библиотеки, поместить сгенерированный модуль перед другим модулем во время компиляции - ничего не помогает. Буду благодарен за любую помощь.