|
Boost Users : |
Subject: Re: [Boost-users] [C++-sig] Boost python exception translation failure on BlueGene/P
From: Igore Dmit. (trueorca_at_[hidden])
Date: 2010-02-26 11:11:09
I believe '<link>shared' could do the job in bjam.
2010/2/24 James Amundson <amundson_at_[hidden]>
>
> On 02/18/2010 04:24 PM, James Amundson wrote:
>
>> Boost Python seems to be failing to catch and translate C++ exceptions for
>> me on a BlueGene/P installation. I really don't know what to do next in
>> debugging the problem, so I would appreciate any advice.
>>
>
> I have finally solved this problem myself -- I am responding to my own
> message on these mailing lists in case this information is useful to others.
>
> In the end the solution was to add the flag "-dynamic" to the
> libboost_python link line. Without the flag, boost::python mostly works on
> BlueGene/P, but exceptions are not caught. With the flag, boost_python
> passes all tests I have done.
>
> I spent some time trying to understand how to tell bjam to add a flag to
> the boost_python link line, but I gave up after about fifteen minutes. With
> the CMake build of boost, it was easy: I simply did
> cmake -DCMAKE_SHARED_LINKER_FLAGS="-dynamic"
> Overall, I found dealing with the cmake build of boost so much more
> pleasant than dealing with bjam that I don't understand why the CMake build
> hasn't taken over the mainstream yet.
>
> --Jim Amundson
>
> P.S. The original problem report:
>
>> I have a simple test module, pyexcept
>> ------------------------------------------------------------
>> #include <boost/python.hpp>
>> #include <iostream>
>> #include <stdexcept>
>>
>>
>> void
>> foo()
>> {
>> std::cout << "in foo, about to raise exception\n";
>> throw std::runtime_error("runtime_error from foo");
>> std::cout << "this should never be seen\n";
>> }
>>
>> using namespace boost::python;
>>
>> BOOST_PYTHON_MODULE(pyexcept)
>> {
>> def("foo",foo);
>> }
>> ------------------------------------------------------------
>>
>> I test it with the following python script:
>> ------------------------------------------------------------
>> #!/usr/bin/env python
>>
>> import pyexcept
>>
>> print "about to run pyexcept.foo, catching exception"
>> try:
>> pyexcept.foo()
>> except RuntimeError,e:
>> print "caught RuntimeError,",e
>> ------------------------------------------------------------
>>
>> On my Linux machine I see:
>> ------------------------------------------------------------
>> about to run pyexcept.foo, catching exception
>> in foo, about to raise exception
>> caught RuntimeError, runtime_error from foo
>> ------------------------------------------------------------
>>
>> On the BlueGene/P machine I see:
>> ------------------------------------------------------------
>> about to run pyexcept.foo, catching exception
>> in foo, about to raise exception
>> terminate called after throwing an instance of 'std::runtime_error'
>> what(): runtime_error from foo
>> ------------------------------------------------------------
>>
>> I have (cross-)compiled boost myself using the system's installed version
>> of the gnu compilers, 4.1.2:
>> ------------------------------------------------------------
>> |login2>mpicxx.gnu --version
>> powerpc-bgp-linux-g++ (GCC) 4.1.2 (BGP)
>> ------------------------------------------------------------
>>
>> (The mpicxx.gnu script is a wrapper around the cross-compiling g++.) Has
>> anyone seen a problem like this? Any ideas as to how to debug it?
>>
>> Thanks for any advice.
>>
>> --Jim Amundson
>>
>> _______________________________________________
>> Cplusplus-sig mailing list
>> Cplusplus-sig_at_[hidden]
>> http://mail.python.org/mailman/listinfo/cplusplus-sig
>>
>
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/boost-users
>
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