简单boost::python程序崩溃
我需要将cpp扩展集成到python中。因此,我认为boost::python可能是一种很好的方法。在运行了一个简单的示例之后,我目前遇到了一些我不理解的问题。请查看以下代码: betainv.cpp简单boost::python程序崩溃,python,c++,boost,Python,C++,Boost,我需要将cpp扩展集成到python中。因此,我认为boost::python可能是一种很好的方法。在运行了一个简单的示例之后,我目前遇到了一些我不理解的问题。请查看以下代码: betainv.cpp #include <boost/python.hpp> #include <boost/math/distributions/beta.hpp> using namespace boost::python; class betainvClass { public
#include <boost/python.hpp>
#include <boost/math/distributions/beta.hpp>
using namespace boost::python;
class betainvClass {
public: double betainv(double p, double a, double b);
};
double betainvClass::betainv(double p, double a, double b) {
return boost::math::ibeta_inv(a, b, p);
}
// Expose classes and methods to Python
BOOST_PYTHON_MODULE(betainv) {
class_<betainvClass> ("create_betainv_instance")
.def("betainv", &betainvClass::betainv)
;
}
还有Makefile
TARGET = betainv
PYTHON = /usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/include/python2.7
BOOST_INC = /usr/local/include
BOOST_LIB = /usr/local/lib
$(TARGET).so: $(TARGET).o
g++ -shared -Wl \
$(TARGET).o -L$(BOOST_LIB) -lboost_python \
-L/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/config -lpython2.7 \
-o betainv.so
$(TARGET).o: $(TARGET).cpp
g++ -I$(PYTHON) -I$(BOOST_INC) -c $(TARGET).cpp
clean:
rm -f *.o *.a *.so *~ core
编辑工作做得很好。但是,在执行程序时,我得到以下错误:
python betainv.py
Fatal Python error: PyThreadState_Get: no current thread
Abort trap: 6
有人知道我做错了什么吗?好的,我知道了。实际上上面的代码是正确的。然而,我使用的是MacOSX,我将boost库与python安装的自制软件相链接。编译之后,我使用原始的苹果版python执行了python代码。因此存在二进制不兼容(有关更多信息,请参见此处:) 使用自制python安装运行代码效果良好 谢谢你的阅读
python betainv.py
Fatal Python error: PyThreadState_Get: no current thread
Abort trap: 6