[C++-sig] compile errors with embedding example from tutorial

Chad Austin caustin at gmail.com
Mon Jun 28 06:46:06 CEST 2004


Hi Faheem,

I ran into that too.  In short, the line with "handle<>( PyRun_String"
isn't being understood how you want it too...  You can surround that
expression with parenthesis, and it should work:

(handle<>( PyRun_String("hello = file('hello.txt', 'w')\n"
                        "hello.write('Hello world!')\n"
                          "hello.close()", Py_file_input,
                          main_namespace.get(), main_namespace.get()) ));

Chad

On Mon, 28 Jun 2004 04:26:19 +0000 (UTC), Faheem Mitha
<faheem at email.unc.edu> wrote:
> 
> Dear People,
> 
> When trying to compile the following code (direct from sample code in
> the turorial) I get these errors. I am using distutils and realise my
> flags may not be exactly right, but the compiler seems to be saying it
> cannot find the correct version of handler to use! This does not look
> like it has anything to do with the correct flags, though I could be
> wrong.
> 
> I'm trying to call the interpreter from within a extension module. Is
> there any reason I can't do this? Thanks in advance.
> 
>                                                              Faheem.
> 
> building 'embed' extension
> gcc -pthread -fno-strict-aliasing -DNDEBUG -g -O3 -Wall
> -Wstrict-prototypes -fPIC -I/usr/include/python2.3 -c embed.cc -o
> /tmp/temp.linux-i686-2.3/embed.o -Wl,-E
> embed.cc: In function `void foo()':
> embed.cc:35: error: no matching function for call to `
>    boost::python::handle<PyObject>::handle(const char[73], int,
>    PyObject*,
>    PyObject*)'
> /usr/include/boost/python/handle.hpp:129: error: candidates are:
>    boost::python::handle<T>::handle(boost::python
>    ::detail::borrowed_reference_t*)
>    [with T = PyObject]
> /usr/include/boost/python/handle.hpp:110: error:
>    boost::python::handle<T>::handle(const boost::python::handle<T>&)
>    [with T =
>    PyObject]
> /usr/include/boost/python/handle.hpp:205: error:
>    boost::python::handle<T>::handle() [with T = PyObject]
> error: command 'gcc' failed with exit status 1
> make: *** [embed.so] Error 1
> make: Target `all' not remade because of errors.
> 
> Compilation exited abnormally with code 2 at Mon Jun 28 00:02:00
> 
> *************************************************************************
> embed.cc
> *************************************************************************
> #include <boost/python.hpp>
> #include <boost/scoped_ptr.hpp>
> #include <python2.3/Python.h>
> #include <pythonrun.h>
> using namespace boost::python;
> 
> void foo()
> {
>   Py_Initialize();
> 
>   handle<> main_module(borrowed( PyImport_AddModule("__main__") ));
> 
>   handle<> main_namespace(borrowed( PyModule_GetDict(main_module.get()) ));
> 
>   handle<>( PyRun_String("hello = file('hello.txt', 'w')\n"
>                          "hello.write('Hello world!')\n"
>                            "hello.close()", Py_file_input,
>                            main_namespace.get(), main_namespace.get()) );
> 
>     Py_Finalize();
> }
> 
> BOOST_PYTHON_MODULE(embed)
> {
>   def("foo",foo);
> }
> *************************************************************************
> 
> _______________________________________________
> C++-sig mailing list
> C++-sig at python.org
> http://mail.python.org/mailman/listinfo/c++-sig
>




More information about the Cplusplus-sig mailing list