2017-10-05 131 views
0

我的目標是爲我的python代碼編寫一個多線程C++ DLL。 Python代碼的功能是調用C++庫來使用PCL處理點雲,而C++庫會自動產生一個新線程來可視化點雲。 我的boost.python模塊工作正常,直到我在我的C++庫中包含boost.thread。編譯錯誤我得到的是如下:使用boost.python和boost.thread時編譯錯誤

In file included from /usr/include/boost/preprocessor/iteration/detail/iter/forward1.hpp:52:0, 
       from /usr/include/boost/python/object/value_holder.hpp:50, 
       from /usr/include/boost/python/object/class_metadata.hpp:11, 
       from /usr/include/boost/python/class.hpp:23, 
       from /usr/include/boost/python.hpp:18, 
       from /home/boooooosh/QuickAccess/Depowdering/blackbox/src/blackbox_skeleton/central_processor.cpp:8: 
/usr/include/boost/python/object/value_holder.hpp: In instantiation of ‘boost::python::objects::value_holder<Value>::value_holder(PyObject*, A0) [with A0 = boost::reference_wrapper<const BlackboxProcessor>; Value = BlackboxProcessor; PyObject = _object]’: 
/usr/include/boost/python/object/make_instance.hpp:71:48: required from ‘static Holder* boost::python::objects::make_instance<T, Holder>::construct(void*, PyObject*, boost::reference_wrapper<const T>) [with T = BlackboxProcessor; Holder = boost::python::objects::value_holder<BlackboxProcessor>; PyObject = _object]’ 
/usr/include/boost/python/object/make_instance.hpp:45:74: required from ‘static PyObject* boost::python::objects::make_instance_impl<T, Holder, Derived>::execute(Arg&) [with Arg = const boost::reference_wrapper<const BlackboxProcessor>; T = BlackboxProcessor; Holder = boost::python::objects::value_holder<BlackboxProcessor>; Derived = boost::python::objects::make_instance<BlackboxProcessor, boost::python::objects::value_holder<BlackboxProcessor> >; PyObject = _object]’ 
/usr/include/boost/python/object/class_wrapper.hpp:29:51: required from ‘static PyObject* boost::python::objects::class_cref_wrapper<Src, MakeInstance>::convert(const Src&) [with Src = BlackboxProcessor; MakeInstance = boost::python::objects::make_instance<BlackboxProcessor, boost::python::objects::value_holder<BlackboxProcessor> >; PyObject = _object]’ 
/usr/include/boost/python/converter/as_to_python_function.hpp:27:61: required from ‘static PyObject* boost::python::converter::as_to_python_function<T, ToPython>::convert(const void*) [with T = BlackboxProcessor; ToPython = boost::python::objects::class_cref_wrapper<BlackboxProcessor, boost::python::objects::make_instance<BlackboxProcessor, boost::python::objects::value_holder<BlackboxProcessor> > >; PyObject = _object]’ 
/usr/include/boost/python/to_python_converter.hpp:88:9: [ skipping 2 instantiation contexts, use -ftemplate-backtrace-limit=0 to disable ] 
/usr/include/boost/python/object/class_metadata.hpp:229:80: required from ‘static void boost::python::objects::class_metadata<T, X1, X2, X3>::register_aux2(T2*, Callback) [with T2 = BlackboxProcessor; Callback = boost::integral_constant<bool, false>; T = BlackboxProcessor; X1 = boost::python::detail::not_specified; X2 = boost::python::detail::not_specified; X3 = boost::python::detail::not_specified]’ 
/usr/include/boost/python/object/class_metadata.hpp:219:60: required from ‘static void boost::python::objects::class_metadata<T, X1, X2, X3>::register_aux(void*) [with T = BlackboxProcessor; X1 = boost::python::detail::not_specified; X2 = boost::python::detail::not_specified; X3 = boost::python::detail::not_specified]’ 
/usr/include/boost/python/object/class_metadata.hpp:205:43: required from ‘static void boost::python::objects::class_metadata<T, X1, X2, X3>::register_() [with T = BlackboxProcessor; X1 = boost::python::detail::not_specified; X2 = boost::python::detail::not_specified; X3 = boost::python::detail::not_specified]’ 
/usr/include/boost/python/class.hpp:497:29: required from ‘void boost::python::class_<T, X1, X2, X3>::initialize(const DefVisitor&) [with DefVisitor = boost::python::init<>; W = BlackboxProcessor; X1 = boost::python::detail::not_specified; X2 = boost::python::detail::not_specified; X3 = boost::python::detail::not_specified]’ 
/usr/include/boost/python/class.hpp:630:5: required from ‘boost::python::class_<T, X1, X2, X3>::class_(const char*, const char*) [with W = BlackboxProcessor; X1 = boost::python::detail::not_specified; X2 = boost::python::detail::not_specified; X3 = boost::python::detail::not_specified]’ 
/home/boooooosh/QuickAccess/Depowdering/blackbox/src/blackbox_skeleton/central_processor.cpp:154:48: required from here 
/usr/include/boost/python/object/value_holder.hpp:137:13: error: no matching function for call to ‘BlackboxProcessor::BlackboxProcessor(boost::reference_wrapper<const BlackboxProcessor>::type&)’ 
      BOOST_PP_REPEAT_1ST(N, BOOST_PYTHON_UNFORWARD_LOCAL, nil) 
      ^
/usr/include/boost/python/object/value_holder.hpp:137:13: note: candidates are: 
In file included from /home/boooooosh/QuickAccess/Depowdering/blackbox/src/blackbox_skeleton/central_processor.cpp:12:0: 
/home/boooooosh/QuickAccess/Depowdering/blackbox/include/blackbox_skeleton/central_processor.h:72:3: note: BlackboxProcessor::BlackboxProcessor() 
    BlackboxProcessor() { 
^
/home/boooooosh/QuickAccess/Depowdering/blackbox/include/blackbox_skeleton/central_processor.h:72:3: note: candidate expects 0 arguments, 1 provided 
/home/boooooosh/QuickAccess/Depowdering/blackbox/include/blackbox_skeleton/central_processor.h:31:7: note: BlackboxProcessor::BlackboxProcessor(BlackboxProcessor&) 
class BlackboxProcessor { 

每當我開始使用boost ::互斥或升壓::線程,我會得到這個錯誤。 我不太清楚是什麼導致了這個錯誤。

非常感謝!

回答

0

好的,這可能不是一個解決方案,但我問我的老師,他說,如果你同時使用boost python和它的線程功能,它會出錯。在改爲pthread lib而不是boost之後,一切正常。

然而,總是歡迎更優雅的解決方案!