[C++-sig] strange sideeffect or bug of boost.python

yakumoklesk at yahoo.es yakumoklesk at yahoo.es
Wed Oct 29 13:31:01 CET 2003


Something like this happened to me. Maybe youo are compiling a Debug version of your 
application. As boost python makes a wrap include of "python.h" in order to avoid 
compilin with the python_d debug library, you are compiling a debug version without a 
debug python library. To avoid this, in your precompiler definitions in the project in 
visual C just define: BOOST_DEBUG_PYTHON. With this definition you can include the 
necessary bost/python.hpp include file in order to work with bost::python namespace 
objects.

I hope this helped you.

David.

On 29 Oct 2003 at 12:33, Lutz Paelike wrote:

> Hi,
> 
> i encountered a strange thing when i wanted to create a dictionary object from c++.
> The error is after creating the dict with no errors (result!=NULL) a simple PyDict_Check fails with no reason.
> I tracked this down through the Python Sources and extracted the essential source of PyDict_Check and inserted
> it into the example code below. In the Debugger i see that the ob_type of the new object is somehow screwed up.
> And now the strange thing: This error goes away and the code works like expected if i remove the boost include.
> 
> Am I missing something or is this a strange side effect ?
> 
> I'm using Visual Studio 6 SP5 and a recent boost cvs checkout (about 1-2 weeks old)
> 
> Thanks for your help,
> 
> Lutz
> 
> Here is the code:
> 
> ///////////////////////////snip//////////////////////////////////////
> #include <boost/python.hpp> // comment this out to make it work
> 
> #include <string>
> #include <iostream>
> #include <fstream>
> #include <exception>
> #include <stdexcept>
> 
> #include <Python.h>
> #include <compile.h>
> #include <eval.h>
> #include <dictobject.h>
> 
> 
> int main()
> {
>      Py_Initialize();
> 
> 	PyObject *the_dict = PyDict_New ();
> 
> 	if (NULL!=the_dict){
> 
> 		Py_INCREF(the_dict);
> 
> 		_typeobject  * dt = &PyDict_Type;
> 
> 		// PyDict_Check does this. Why isn't this working here?
> 		bool isT  = ((the_dict)->ob_type == (&PyDict_Type));
> 		bool isST = PyType_IsSubtype((the_dict)->ob_type, (&PyDict_Type));
> 
> 		if (isT) printf("the_dict is of type PyDict_Type\n");
> 		else printf("the_dict is not of type PyDict_Type! Boost.Python Bug?\n");
> 		
> 		if (isST) printf("the_dict is of subtype PyDict_Type\n");
> 		else printf("the_dict is not of subtype PyDict_Type! Boost.Python Bug?\n");
> 
> 		Py_DECREF(the_dict);
> 
> 	} else printf("Error creating new dict\n");
> 
> 	Py_Finalize();
> 
>      return 0;
> }
> 
> ///////////////////////////snip//////////////////////////////////////
> 
> 
> 
> _______________________________________________
> 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