[C++-sig] errors compiling Boost Python example

Ralf Grosse-Kunstleve rwgk at google.com
Thu Jul 5 16:59:55 CEST 2012


Oops, I meant to mark the extra const with a color:

char const * *const* greet() {


On Thu, Jul 5, 2012 at 7:57 AM, Ralf Grosse-Kunstleve <rwgk at google.com>wrote:

> It looks like you inserted an extra const (I don't see it in the current
> tutorial) ...
>
> char const * const greet() {
>
> It should work if you remove it.
>
> Ralf
>
>
> On Thu, Jul 5, 2012 at 3:21 AM, Joel Uckelman <uckelman at nomic.net> wrote:
>
>> I'm trying to compile the example from the Boost Python docs without
>> success.
>>
>> hello.cpp:
>>
>>   #include <boost/python.hpp>
>>
>>   char const * const greet() {
>>     return "hello, world";
>>   }
>>
>>   BOOST_PYTHON_MODULE(hello_ext) {
>>     using namespace boost::python;
>>     def("greet", greet);
>>   }
>>
>> I have Boost 1.48, Python 2.7, and gcc 4.7.0.
>>
>> When I do this:
>>
>>   g++ -fPIC -I/usr/include/python2.7 -c -o hello.o hello.cpp
>>
>> I get the following errors:
>>
>> In file included from
>> /usr/include/boost/preprocessor/iteration/detail/iter/forward1.hpp:47:0,
>>                  from /usr/include/boost/python/detail/invoke.hpp:63,
>>                  from /usr/include/boost/python/detail/caller.hpp:16,
>>                  from
>> /usr/include/boost/python/object/function_handle.hpp:8,
>>                  from
>> /usr/include/boost/python/converter/arg_to_python.hpp:19,
>>                  from /usr/include/boost/python/call.hpp:15,
>>                  from /usr/include/boost/python/object_core.hpp:14,
>>                  from /usr/include/boost/python/args.hpp:25,
>>                  from /usr/include/boost/python.hpp:11,
>>                  from hello.cpp:1:
>> /usr/include/boost/python/detail/invoke.hpp: In instantiation of
>> ‘PyObject*
>> boost::python::detail::invoke(boost::python::detail::invoke_tag_<false,
>> false>, const RC&, F&) [with RC =
>> boost::python::detail::specify_a_return_value_policy_to_wrap_functions_returning<const
>> char* const>; F = const char* const (*)(); PyObject = _object]’:
>> /usr/include/boost/python/detail/caller.hpp:223:13:   required from
>> ‘PyObject* boost::python::detail::caller_arity<0u>::impl<F, Policies,
>> Sig>::operator()(PyObject*, PyObject*) [with F = const char* const (*)();
>> Policies = boost::python::default_call_policies; Sig =
>> boost::mpl::vector1<const char* const>; PyObject = _object]’
>> /usr/include/boost/python/object/py_function.hpp:38:33:   required from
>> ‘PyObject*
>> boost::python::objects::caller_py_function_impl<Caller>::operator()(PyObject*,
>> PyObject*) [with Caller = boost::python::detail::caller<const char* const
>> (*)(), boost::python::default_call_policies, boost::mpl::vector1<const
>> char* const> >; PyObject = _object]’
>> hello.cpp:10:1:   required from here
>> /usr/include/boost/python/detail/invoke.hpp:75:19: error: no match for
>> call to ‘(const
>> boost::python::detail::specify_a_return_value_policy_to_wrap_functions_returning<const
>> char* const>) (const char*)’
>> In file included from
>> /usr/include/boost/python/object/function_handle.hpp:8:0,
>>                  from
>> /usr/include/boost/python/converter/arg_to_python.hpp:19,
>>                  from /usr/include/boost/python/call.hpp:15,
>>                  from /usr/include/boost/python/object_core.hpp:14,
>>                  from /usr/include/boost/python/args.hpp:25,
>>                  from /usr/include/boost/python.hpp:11,
>>                  from hello.cpp:1:
>> /usr/include/boost/python/detail/caller.hpp: In instantiation of ‘static
>> const PyTypeObject*
>> boost::python::detail::converter_target_type<ResultConverter>::get_pytype()
>> [with ResultConverter =
>> boost::python::detail::specify_a_return_value_policy_to_wrap_functions_returning<const
>> char* const>; PyTypeObject = _typeobject]’:
>> /usr/include/boost/python/detail/caller.hpp:242:13:   required from
>> ‘static boost::python::detail::py_func_sig_info
>> boost::python::detail::caller_arity<0u>::impl<F, Policies,
>> Sig>::signature() [with F = const char* const (*)(); Policies =
>> boost::python::default_call_policies; Sig = boost::mpl::vector1<const char*
>> const>]’
>> /usr/include/boost/python/object/py_function.hpp:48:35:   required from
>> ‘boost::python::detail::py_func_sig_info
>> boost::python::objects::caller_py_function_impl<Caller>::signature() const
>> [with Caller = boost::python::detail::caller<const char* const (*)(),
>> boost::python::default_call_policies, boost::mpl::vector1<const char*
>> const> >]’
>> hello.cpp:10:1:   required from here
>> /usr/include/boost/python/detail/caller.hpp:102:109: error: ‘struct
>> boost::python::detail::specify_a_return_value_policy_to_wrap_functions_returning<const
>> char* const>’ has no member named ‘get_pytype’
>> In file included from
>> /usr/include/boost/python/converter/pytype_function.hpp:10:0,
>>                  from /usr/include/boost/python/to_python_indirect.hpp:16,
>>                  from
>> /usr/include/boost/python/converter/arg_to_python.hpp:10,
>>                  from /usr/include/boost/python/call.hpp:15,
>>                  from /usr/include/boost/python/object_core.hpp:14,
>>                  from /usr/include/boost/python/args.hpp:25,
>>                  from /usr/include/boost/python.hpp:11,
>>                  from hello.cpp:1:
>> /usr/include/boost/python/detail/unwind_type.hpp: In instantiation of
>> ‘typename Generator::result_type
>> boost::python::detail::unwind_type(boost::type<U>*, Generator*) [with
>> Generator = boost::python::converter::detail::unwind_type_id_helper; U =
>> const char* const; typename Generator::result_type =
>> boost::python::type_info]’:
>> /usr/include/boost/python/converter/pytype_function.hpp:45:74:   required
>> from ‘boost::python::type_info
>> boost::python::converter::detail::unwind_type_id_(boost::type<T>*,
>> mpl_::false_*) [with T = const char* const; mpl_::false_ =
>> mpl_::bool_<false>]’
>> /usr/include/boost/python/converter/pytype_function.hpp:68:13:   required
>> from ‘static const PyTypeObject*
>> boost::python::converter::expected_pytype_for_arg<T>::get_pytype() [with T
>> = const char* const; PyTypeObject = _typeobject]’
>> /usr/include/boost/python/detail/signature.hpp:98:13:   required from
>> ‘static const boost::python::detail::signature_element*
>> boost::python::detail::signature_arity<0u>::impl<Sig>::elements() [with Sig
>> = boost::mpl::vector1<const char* const>]’
>> /usr/include/boost/python/detail/caller.hpp:232:78:   required from
>> ‘static boost::python::detail::py_func_sig_info
>> boost::python::detail::caller_arity<0u>::impl<F, Policies,
>> Sig>::signature() [with F = const char* const (*)(); Policies =
>> boost::python::default_call_policies; Sig = boost::mpl::vector1<const char*
>> const>]’
>> /usr/include/boost/python/object/py_function.hpp:48:35:   required from
>> ‘boost::python::detail::py_func_sig_info
>> boost::python::objects::caller_py_function_impl<Caller>::signature() const
>> [with Caller = boost::python::detail::caller<const char* const (*)(),
>> boost::python::default_call_policies, boost::mpl::vector1<const char*
>> const> >]’
>> hello.cpp:10:1:   required from here
>> /usr/include/boost/python/detail/unwind_type.hpp:165:72: error: no
>> matching function for call to
>> ‘boost::python::detail::unwind_helper2<1>::execute(const char* const (*)(),
>> boost::python::converter::detail::unwind_type_id_helper*)’
>> /usr/include/boost/python/detail/unwind_type.hpp:165:72: note: candidate
>> is:
>> In file included from
>> /usr/include/boost/python/converter/pytype_function.hpp:10:0,
>>                  from /usr/include/boost/python/to_python_indirect.hpp:16,
>>                  from
>> /usr/include/boost/python/converter/arg_to_python.hpp:10,
>>                  from /usr/include/boost/python/call.hpp:15,
>>                  from /usr/include/boost/python/object_core.hpp:14,
>>                  from /usr/include/boost/python/args.hpp:25,
>>                  from /usr/include/boost/python.hpp:11,
>>                  from hello.cpp:1:
>> /usr/include/boost/python/detail/unwind_type.hpp:114:5: note:
>> template<class Generator, class U> static typename Generator::result_type
>> boost::python::detail::unwind_helper2<1>::execute(U* (*)(), Generator*)
>> /usr/include/boost/python/detail/unwind_type.hpp:114:5: note:   template
>> argument deduction/substitution failed:
>> In file included from
>> /usr/include/boost/python/converter/pytype_function.hpp:10:0,
>>                  from /usr/include/boost/python/to_python_indirect.hpp:16,
>>                  from
>> /usr/include/boost/python/converter/arg_to_python.hpp:10,
>>                  from /usr/include/boost/python/call.hpp:15,
>>                  from /usr/include/boost/python/object_core.hpp:14,
>>                  from /usr/include/boost/python/args.hpp:25,
>>                  from /usr/include/boost/python.hpp:11,
>>                  from hello.cpp:1:
>> /usr/include/boost/python/detail/unwind_type.hpp:165:72: note:   types
>> ‘U*’ and ‘const char* const’ have incompatible cv-qualifiers
>>
>>
>>
>> It looks like the salient error is this one:
>>
>> /usr/include/boost/python/detail/invoke.hpp:75:19: error: no match for
>> call to ‘(const
>> boost::python::detail::specify_a_return_value_policy_to_wrap_functions_returning<const
>> char* const>) (const char*)’
>>
>> but the Boost Python tutorial didn't mention the need to specify a
>> return value policy for the "hello world" example.
>>
>> So, I suppose this is either
>>
>> a) a bug in Boost Python,
>> b) a bug in the Boost Python tutorial I copied from, or
>> c) a mistake I'm making
>>
>> Does anyone see which?
>>
>> --
>> J.
>>
>> _______________________________________________
>> Cplusplus-sig mailing list
>> Cplusplus-sig at python.org
>> http://mail.python.org/mailman/listinfo/cplusplus-sig
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/cplusplus-sig/attachments/20120705/ef50b0ee/attachment-0001.html>


More information about the Cplusplus-sig mailing list