[C++-sig] Boost Python v2 - extending and embedding - memory leaks, compiler warnings

Tex Riddell texrmex at yahoo.com
Fri Nov 8 23:16:50 CET 2002


I posted this question to the boost-users yahoo group, but I realized
from the response to another message on that group regarding
Boost.Python that I should send boost python questions to this list
instead.
___________________________

First, I'm excited about the new work that's been done with Boost
Python v2.  I can't wait to see if it's enough to overcome the pitfalls
that prevented me from getting past the evaluation stage with v1.

I'm using VC7 IDE to build my project and link to python22.lib and
boost_python.lib (built with VC7 command line tools using bjam).  I'm
attempting to extend and embed in my existing project, so I'm not
building a dll, but and exe.  First of all, can I do this?  When it
links it says "Creating library ....lib and object ....exp", and still
creates an exe.  If I don't include my test module (and thus
boost/python.hpp) I don't get this message.  I'm assuming that by
defining a module, boost defines exports and the linker then creates
the lib and exp, since there were exports?  Although I've built dlls
before, I really don't know the inner workings of the process.

The following is a brief example of my module.  At the bottom is a
simple test function that I'm calling just to test importing of the
module.  When I call TestModule(), I get 2 memory leaks from the module
definition section, one from the class definition, and the other from
the method definition.  If I remove these, I get no memory leaks, and
if I add more classes and methods, I get one 12 byte leak per class and
one 12 byte leak per method I add.  I do not get a leak from defining
the top level function "greet".

///////////////////////////////////////////////////
#include <boost\python.hpp>
using namespace boost::python;

namespace {

const char * greet() {
    return "Hello World";
}

class CSimple
{
public:
	bool Test() { return true; }
};

};

BOOST_PYTHON_MODULE(Test)
{
    def("greet", greet);

    class_<CSimple>("Simple")
        .def("Test", &CSimple::Test)
    ;
}

void TestModule()
{
    Py_Initialize();
    initTest();
    Py_Finalize();
}
///////////////////////////////////////////////////

In addition to the memory leaks, I get a number of compiler warnings,
similar to the following:

d:\Boost\boost\python\instance_holder.hpp(18) : warning C4275: non
dll-interface class 'boost::noncopyable' used as base for dll-interface
struct 'boost::python::instance_holder'
        d:\Boost\boost\utility.hpp(50) : see declaration of
'boost::noncopyable'
        d:\Boost\boost\python\instance_holder.hpp(17) : see declaration
of 'boost::python::instance_holder'

*and*

d:\Boost\boost\python\detail\exception_handler.hpp(34) : warning C4251:
'boost::python::detail::exception_handler::m_impl' : class
'boost::function2<R,T0,T1,Policy,Mixin,Allocator>' needs to have
dll-interface to be used by clients of struct
'boost::python::detail::exception_handler'
        with
        [
            R=bool,
            T0=const boost::python::detail::exception_handler &,
            T1=const
boost::function0<void,boost::empty_function_policy,boost::empty_function_mixin,int>
&,
            Policy=boost::empty_function_policy,
            Mixin=boost::empty_function_mixin,
            Allocator=int
        ]

I was wondering if my project is not set up properly, and if these
warnings might have something to do with the memory leaks.

In v1 there was a vc project you could use for building boost python. 
This works well if you are planning on linking to a vc built project,
since you can make sure your settings, paths and libs are consistent
between the boost python lib and your project.  I currently have 3
different sets of build tools (yes, 3 compilers) on this box, with
several different versions of standard and other libraries, so making
sure I have control of the paths and settings used is very important.  

This is one reason I'm weary of the jam environment.  It's yet another
build environment, one that I'm not familiar with, and one that I'm not
going to be using with any other projects except to build boost python.
 So a question would be: how easy would it be for me to set up a VC
project for building boost python?  Has this already been done?  Or am
I barking up the wrong tree?

Thanks in advance,
-Tex


__________________________________________________
Do you Yahoo!?
U2 on LAUNCH - Exclusive greatest hits videos
http://launch.yahoo.com/u2




More information about the Cplusplus-sig mailing list