2017-03-14 32 views
2
#include <iostream> 
using namespace std; 
char const* greet() 
{ 
    return "hello, world"; 
} 

#include <boost/python.hpp> 

BOOST_PYTHON_MODULE(hello_ext) 
{ 
    using namespace boost::python; 
    def("greet", greet); 
} 

我得到了以下错误:这个boost.python程序中的错误是什么?

/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crt1.o: In function _start': 
(.text+0x20): undefined reference to `main' 
/tmp/ccg2v42f.o: In function `inithello_ext': 
hello_world.cpp:(.text+0x1a): undefined reference to `boost::python::detail::init_module(char const*, void (*)())' 
/tmp/ccg2v42f.o: In function `boost::python::type_info::name() const': 
hello_world.cpp:(.text._ZNK5boost6python9type_info4nameEv[_ZNK5boost6python9type_info4nameEv]+0x1f): undefined reference to `boost::python::detail::gcc_demangle(char const*)' 
/tmp/ccg2v42f.o: In function `boost::python::to_python_value<char const* const&>::operator()(char const* const&) const': 
hello_world.cpp:(.text._ZNK5boost6python15to_python_valueIRKPKcEclES5_[_ZNK5boost6python15to_python_valueIRKPKcEclES5_]+0x1b): undefined reference to `boost::python::converter::do_return_to_python(char const*)' 
/tmp/ccg2v42f.o: In function `boost::python::to_python_value<char const* const&>::get_pytype() const': 
hello_world.cpp:(.text._ZNK5boost6python15to_python_valueIRKPKcE10get_pytypeEv[_ZNK5boost6python15to_python_valueIRKPKcE10get_pytypeEv]+0x9): undefined reference to `PyString_Type' 
/tmp/ccg2v42f.o: In function `boost::python::api::object::object()': 
hello_world.cpp:(.text._ZN5boost6python3api6objectC2Ev[_ZN5boost6python3api6objectC5Ev]+0xd): undefined reference to `_Py_NoneStruct' 
/tmp/ccg2v42f.o: In function `void boost::python::def<char const* (*)()>(char const*, char const* (*)())': 
hello_world.cpp:(.text._ZN5boost6python3defIPFPKcvEEEvS3_T_[_ZN5boost6python3defIPFPKcvEEEvS3_T_]+0x50): undefined reference to `boost::python::detail::scope_setattr_doc(char const*, boost::python::api::object const&, char const*)' 
/tmp/ccg2v42f.o: In function `boost::python::api::object boost::python::detail::make_function_aux<char const* (*)(), boost::python::default_call_policies, boost::mpl::vector1<char const*> >(char const* (*)(), boost::python::default_call_policies const&, boost::mpl::vector1<char const*> const&)': 
hello_world.cpp:(.text._ZN5boost6python6detail17make_function_auxIPFPKcvENS0_21default_call_policiesENS_3mpl7vector1IS4_EEEENS0_3api6objectET_RKT0_RKT1_[_ZN5boost6python6detail17make_function_auxIPFPKcvENS0_21default_call_policiesENS_3mpl7vector1IS4_EEEENS0_3api6objectET_RKT0_RKT1_]+0x67): undefined reference to `boost::python::objects::function_object(boost::python::objects::py_function const&)' 
/tmp/ccg2v42f.o: In function `boost::python::objects::py_function_impl_base::py_function_impl_base()': 
hello_world.cpp:(.text._ZN5boost6python7objects21py_function_impl_baseC2Ev[_ZN5boost6python7objects21py_function_impl_baseC5Ev]+0x9): undefined reference to `vtable for boost::python::objects::py_function_impl_base' 
/tmp/ccg2v42f.o:(.rodata._ZTVN5boost6python7objects23caller_py_function_implINS0_6detail6callerIPFPKcvENS0_21default_call_policiesENS_3mpl7vector1IS6_EEEEEE[_ZTVN5boost6python7objects23caller_py_function_implINS0_6detail6callerIPFPKcvENS0_21default_call_policiesENS_3mpl7vector1IS6_EEEEEE]+0x30): undefined reference to `boost::python::objects::py_function_impl_base::max_arity() const' 
/tmp/ccg2v42f.o: In function `boost::python::objects::caller_py_function_impl<boost::python::detail::caller<char const* (*)(), boost::python::default_call_policies, boost::mpl::vector1<char const*> > >::~caller_py_function_impl()': 
hello_world.cpp:(.text._ZN5boost6python7objects23caller_py_function_implINS0_6detail6callerIPFPKcvENS0_21default_call_policiesENS_3mpl7vector1IS6_EEEEED2Ev[_ZN5boost6python7objects23caller_py_function_implINS0_6detail6callerIPFPKcvENS0_21default_call_policiesENS_3mpl7vector1IS6_EEEEED5Ev]+0x20): undefined reference to `boost::python::objects::py_function_impl_base::~py_function_impl_base()' 
/tmp/ccg2v42f.o:(.rodata._ZTIN5boost6python7objects23caller_py_function_implINS0_6detail6callerIPFPKcvENS0_21default_call_policiesENS_3mpl7vector1IS6_EEEEEE[_ZTIN5boost6python7objects23caller_py_function_implINS0_6detail6callerIPFPKcvENS0_21default_call_policiesENS_3mpl7vector1IS6_EEEEEE]+0x10): undefined reference to `typeinfo for boost::python::objects::py_function_impl_base' 
/tmp/ccg2v42f.o: In function `boost::python::converter::expected_pytype_for_arg<char const*>::get_pytype()': 
hello_world.cpp:(.text._ZN5boost6python9converter23expected_pytype_for_argIPKcE10get_pytypeEv[_ZN5boost6python9converter23expected_pytype_for_argIPKcE10get_pytypeEv]+0x1b): undefined reference to `boost::python::converter::registry::query(boost::python::type_info)' 
hello_world.cpp:(.text._ZN5boost6python9converter23expected_pytype_for_argIPKcE10get_pytypeEv[_ZN5boost6python9converter23expected_pytype_for_argIPKcE10get_pytypeEv]+0x32): undefined reference to `boost::python::converter::registration::expected_from_python_type() const' 
collect2: error: ld returned 1 exit status 
+0

似乎不仅仅是“一个错误”,更像是一打。显而易见的事情:a)看起来这应该是一个图书馆,但它正在寻找'main'。你构建系统似乎配置不当。 b)你没有链接boost_python –

+1

你可能忘了链接到libboost_python(-lboost_python g ++参数)。 –

回答

-2
using namespace boost::python; 
// Change to 
using namespace; 
boost::python; 

您使用了namespace std;功能的两倍。您应该只在程序开始时或在任何位置添加using namespace std;,但应该只使用一次。

这里的问题似乎是您已经使用了该功能两次。该计划似乎与这两项功能发生冲突。

如果有未定义的参考,您也会收到其中的两个错误。

(.text+0x20): undefined reference to `main' 

hello_world.cpp:(.text+0x1a): undefined reference to `boost::python::detail::init_module(char const*, void (*)())' 

要么你是为了有计划内的int main()功能,因为这允许你声明一组功能,或则是另一个问题。

请给这个试试看,让我知道它是怎么回事。

+5

您应该稍微详细一点,因为您发布的内容没有任何意义。 (TBH,根据您在过去2小时内发布的所有答案,您应该更多地关注质量而不是数量,除非意图是将您的代表驱动为0) –