[C++-sig] Boost.Python std::cerr segfault when built with -lGL

Gazihan Alankus gazihan at cse.wustl.edu
Wed May 30 10:28:28 CEST 2007


Gazihan Alankus wrote:

> Stefan Seefeld wrote:
>> 
>> Have you tried reducing your test case to the point where boost.python
>> isn't part of the setup any more ? It doesn't sound as if your problem is
>> related to neither Python nor boost, in any case.
> 
> Yes, apparently I wasn't right about that -lGL causing that, althought it
> looked like that for the last hour before posting that message. Now it's
> almost randomly based on my build parameters. I'll post later when I
> figure things out. Thanks for the reply.

My doubts were on that I'm not using bjam and I thought my build parameters
could be the cause, but I just disproved it. I edited the sample
libs/python/example/quickstart/extending.cpp to write something to
std::cerr and compiled it using what bjam -o tells me and it ran fine. When
I added -lGL to that and it created the segfault again. So I'm pretty sure
that when I link a Boost.Python library to OpenGL, usage of std::cerr gives
a segfault. gdb tells me it's being encountered in operator<<().
fprintf(stderr, "something") works fine however. And yes, I have no
problems with cerr and OpenGL when Boost.Python is not around. Btw, I
recompiled my gcc (libstdc++ and everything), python, boost and mesa in
case there was some kind of corruption before. 

So I'm not sure how to track this down right now. I have no other problem in
my system, it's obvious to me that the problem must be in Boost.Python or
something related to OpenGL. Since I have no other OpenGL problems, my bets
are on Boost.Python. I modified the simple example in
libs/python/example/quickstart/extending.cpp of the boost 1.34 source to
get this error behavior. Here is the hello class:

  class hello
  {
    public:
      hello(const std::string& country) { this->country = country; }
      std::string greet() const {
      std::cout << "cout" << std::cerr.eof() << " " << std::cerr.fail()
<< " " << std::cerr.bad() << " " << std::cerr.exceptions() << "\n";
      std::cerr << "cerr" << "\n";
      return "Hello from " + country;
      }
    private:
      std::string country;
  };

And this is what I do in python:

import extending; a = extending.hello('aoeu'); a.greet()

The eof, fail, etc are 0 in both, but I get the segfault when -lGL is there. 

I found out that I'm actually not the only one:
http://mail.datenhain.de/pipermail/libavg-users/2007-March/000085.html
http://vdrift.net/Forum/viewtopic.php?p=5128

So, any idea how to track this problem down would be appreciated. I hope
this can result in a meaningful bug report in the end. 

-Gazi 





More information about the Cplusplus-sig mailing list