简体   繁体   English

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

[英]What is the error in this boost.python program?

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

I got the following error: 我收到以下错误:

/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
using namespace boost::python;
// Change to
using namespace; 
boost::python;

You've used the namespace std; 您已经使用了namespace std; function twice. 功能两次。 You should only add using namespace std; 您应该只using namespace std;添加using namespace std; at the beginning of the program or wherever you are putting it, although you should only use it once. 在程序的开头或放置它的任何位置,尽管您只能使用一次。

The problem here seems that you have used that function twice. 这里的问题似乎是您已两次使用该功能。 The program seems to be clashing those two functions. 该程序似乎在冲突这两个功能。

You are also receving two of these errors where there is an undefined reference. 您还会收到其中有未定义引用的两个错误。

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

and

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

Either you are meant to have the int main() function within the program as this allows you to declare a set of functions, or then there is another issue. 您可能打算在程序中拥有int main()函数,因为这使您可以声明一组函数,否则就会出现另一个问题。

Please give this a try and let me know how it goes. 请尝试一下,让我知道如何进行。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM