这个boost.python程序有什么错误?

时间:2017-03-14 20:00:02

标签: python c++ boost g++ boost-python

#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);
}

我收到以下错误:

/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

1 个答案:

答案 0 :(得分:-3)

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()函数,因为这允许您声明一组函数,或者还有另一个问题。

请试一试,让我知道它是怎么回事。