Boost logo

Boost Users :

From: John Hunter (jdhunter_at_[hidden])
Date: 2002-06-02 13:11:57


I have been using boost python for some time now and recently upgraded
to boost_1_28_0 and gcc 3.0.4. I started getting a segmentation fault
when using a library with an overloaded constructor. In trying to
track down the source of the problem, I wrote a simple class with an
overloaded constructor and still get the seg fault.

Perhaps there is something wrong with code or the compile statement,
but I have been unable to find. it. So I've also included some
additional info below that may give someone a clue as to what is going
wrong.

Here is the python script which calls the simple class. The
second constructor crashes with a seg fault:

from TestSimple import Simple

# Default constructor OK
d1 = Simple()
print d1.get()

i = 1
d2 = Simple(i) # this line causes the seg fault
print d2.get()

----
Here is the code I use to make the module TestSimple:
#include <boost/python/class_builder.hpp>
class SimpleClass  {
public:
  SimpleClass() : i(-1) {};
  SimpleClass(int i) : i(i) {};
  int get() const { return i; }
private:
  const int i;
};
namespace python = boost::python;
BOOST_PYTHON_MODULE_INIT(TestSimple)
{
  python::module_builder m( "TestSimple" );
  python::class_builder<SimpleClass> simple(m, "Simple");
  simple.def(python::constructor<>());
  simple.def(python::constructor<int>());
  simple.def(&SimpleClass::get, "get");
}
----
Here are the compile commands:
/usr/local/bin/g++ -I/usr/local/include/python2.1 -I/usr/local/include -ggdb -Wall -fPIC -ftemplate-depth-21 -c TestSimplePy.cpp
/usr/local/bin/g++ -shared -L/usr/local/lib -ggdb -Wall -fPIC -ftemplate-depth-21 TestSimplePy.o  -o TestSimple.so -lboost_python 
----
I run the script in a controlled environment with:
#!/bin/sh
export LD_LIBRARY_PATH=/usr/local/lib
/usr/local/bin/python2.1 ./testSimple.py
----
Here is the ldd for the TestSimple module:
mother:~/c/trade/test> ldd TestSimple.so 
	libboost_python.so.1.28.0 => /usr/local/lib/libboost_python.so.1.28.0 (0x40011000)
	libstdc++.so.3 => /usr/local/lib/libstdc++.so.3 (0x40078000)
	libm.so.6 => /lib/i686/libm.so.6 (0x40112000)
	libgcc_s.so.1 => /usr/local/lib/libgcc_s.so.1 (0x40136000)
	libc.so.6 => /lib/i686/libc.so.6 (0x4013e000)
	libutil.so.1 => /lib/libutil.so.1 (0x4026e000)
	/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x80000000)
----
All the version info looks right -- python2.1 was compiled with the
same gcc (3.0.4) that the module was.
Thanks for any suggestions,
John Hunter

Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net