Hi Phil<br><br>On Wed, Sep 23, 2009 at 9:43 PM, Phil Thompson <span dir="ltr">&lt;<a href="mailto:phil@riverbankcomputing.com">phil@riverbankcomputing.com</a>&gt;</span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
On Tue, 22 Sep 2009 20:28:09 +0200, Arve Knudsen &lt;<a href="mailto:arve.knudsen@gmail.com">arve.knudsen@gmail.com</a>&gt;<br>
<div><div></div><div class="h5">wrote:<br>
&gt; On Tue, Sep 22, 2009 at 7:27 PM, Phil Thompson<br>
&gt; &lt;<a href="mailto:phil@riverbankcomputing.com">phil@riverbankcomputing.com</a>&gt;wrote:<br>
&gt;<br>
&gt;&gt; On Tue, 22 Sep 2009 19:17:12 +0200, Arve Knudsen<br>
&lt;<a href="mailto:arve.knudsen@gmail.com">arve.knudsen@gmail.com</a>&gt;<br>
&gt;&gt; wrote:<br>
&gt;&gt; &gt; On Tue, Sep 22, 2009 at 6:28 PM, Phil Thompson<br>
&gt;&gt; &gt; &lt;<a href="mailto:phil@riverbankcomputing.com">phil@riverbankcomputing.com</a>&gt;wrote:<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; On Mon, 21 Sep 2009 18:40:35 +0200, Arve Knudsen<br>
&gt;&gt; &lt;<a href="mailto:arve.knudsen@gmail.com">arve.knudsen@gmail.com</a>&gt;<br>
&gt;&gt; &gt;&gt; wrote:<br>
&gt;&gt; &gt;&gt; &gt; Hi<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; I have run into this problem where a C++ exception is not correctly<br>
&gt;&gt; &gt;&gt; &gt; translated into Python on Linux (it works under VC++ on Windows).<br>
&gt;&gt; &gt;&gt; &gt; The<br>
&gt;&gt; &gt;&gt; &gt; exception is apparently not caught as it should, but looking at the<br>
&gt;&gt; &gt;&gt; &gt; SIP-generated sourcecode I cannot see why (there is a try/catch<br>
&gt;&gt; &gt;&gt; &gt; block<br>
&gt;&gt; &gt;&gt; &gt; for<br>
&gt;&gt; &gt;&gt; &gt; the exception). Any ideas as to what might be going wrong here? I<br>
&gt;&gt; &gt;&gt; &gt; have<br>
&gt;&gt; &gt;&gt; &gt; tried<br>
&gt;&gt; &gt;&gt; &gt; std::exception instead of my custom exception, and this gets<br>
&gt;&gt; translated<br>
&gt;&gt; &gt;&gt; &gt; correctly to Python.<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; Attached I have a simple library &#39;raiser&#39;, which is wrapped by the<br>
&gt;&gt; &gt;&gt; &gt; Python<br>
&gt;&gt; &gt;&gt; &gt; module &#39;raiser&#39;. In order to build it, first build a shared library<br>
&gt;&gt; &gt;&gt; &gt; from<br>
&gt;&gt; &gt;&gt; &gt; &#39;raiser.cpp&#39;, then run &#39;configure.py&#39; and make.<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; Works fine for me on Linux with the current SIP snapshot. I did<br>
change<br>
&gt;&gt; &gt;&gt; your<br>
&gt;&gt; &gt;&gt; code first to make everything in-line so it wasn&#39;t necessary to build<br>
&gt;&gt; &gt;&gt; a<br>
&gt;&gt; &gt;&gt; separate library.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; By inlining you remove the problem of interest, which is to propagate<br>
&gt;&gt; &gt; an<br>
&gt;&gt; &gt; exception from one library to another. It also works for me when<br>
&gt;&gt; inlining,<br>
&gt;&gt; &gt; so try my original version please.<br>
&gt;&gt;<br>
&gt;&gt; That implies it&#39;s a build system issue. Can you send me the Makefile you<br>
&gt;&gt; are using to build the library so that I know I&#39;m exactly reproducing<br>
&gt;&gt; what<br>
&gt;&gt;  you are doing.<br>
&gt;<br>
&gt;<br>
&gt; For this particular case, you can do the simplest thing possible: g++<br>
&gt; -shared -o libraiser.so raiser.cpp.<br>
<br>
</div></div>And add -fPIC presumably.<br></blockquote><div><br>I forgot about that actually, apparently it made no difference :) <br><br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">

You need to add &quot;export_all=True&quot; when creating the Makefile in your<br>
configure.py.<font color="#888888"><br></font></blockquote><div><br>Thanks, this worked for my simple case. However, it does not help in our real project (although the exceptions&#39; corresponding symbols in the binaries now seem more consistent with the throwing module), so I&#39;m guessing that the issue is with different build parameters for our C++ and Python subsystems. The C++ part of our project is built with QMake, is there any standard way of passing parameters from a QMake setup to the SIP configuration system, so that they are consistent?<br>
<br>Thanks!<br>Arve<br></div></div><br>