Re: pyilmbase problems importing imath

Federico Naum <[email protected]>
Newsgroups gmane.comp.video.openexr.devel
Organization Animal Logic
Message-ID <[email protected]>
Hello Nick,

Thank you so much for your prompt response.

What you are pointing makes sense, but I think the problem that
you are pointing should be Windows only, and as I stated I'm on
Linux (Centos 6.2)

I think by default on linux all symbols are exported, and we are
not playing with the visibility flags (unless ilmbase/pyilmbase
that does that by default? I'll check).

The weird thing is that nobody else seems to have this issue on
Linux, and that's why my ugly workaround should not be necessary

I'm going to grab someone else with better c++ skills today to see
if we can provide better input to solve this issue.

if you need some other input let me know, but I'll guess you can
not repro that in Linux

Cheers

Fede

On 13/02/14 04:06, Nick wrote:

Hello, this issue is the same as described here.

https://github.com/openexr/openexr/issues/86

In your case,the problem stems from the members of the base
exception being exported, not the class definition.

The correct fix is to follow through the work in progress
on that github thread and commit it to the repo.

I have appended your note to the issue on github for
documentation. The issue you reference from the alembic
mailing list is the same issue.

Unfortunately, that thread has not been updated in a little
while, but it should be possible for anyone with a Windows
development set up to pick up the work and send a pull
request. At the moment, I personally don't have a windows dev
set up, which is why I'm appealing to the list to complete the
work.

Regards,

- Nick

----------
Date: Wed, 12 Feb 2014 18:50:21 +1100

From: [email protected]

To: [email protected]

CC: [email protected]

Subject: [Openexr-devel] pyilmbase problems importing imath

Hi

Hope this is the forum to ask.

I'm building pyilmbase 1.0.0 under llinux Centos 6.2, with
ilmbase 1.0.3, gcc4.1.2 and boost 1.44.0 (also tried all
combinations of the newer version of pyilmbase 2.0.0/1
against ilmbase 2.0 with newer compiler gcc446, and several
flavours boost.

In all cases I can build successfully and import iex just

fine, but importing imath does SegFault, it does
crashed on line 241 of PyIex.h

240│ const
TypeTranslator<IEX_NAMESPACE::BaseExc>::ClassDesc
*baseDesc = baseExcTranslator().template
findClassDesc<ExcBase>(baseExcTranslator().firstClassDesc());

241├> std::string baseName =
baseDesc->typeName();

242│ std::string baseModule = baseDesc->moduleName();

baseDesc ends up with a nullPointer (const
PyIex::TypeTranslator<Iex_2_0::BaseExc>::ClassDesc *)
0x0

As importing iex works fine, I changed the code in
imathmodule.cpp to kind of copy how the Exception gets
registered.

<
PyIex::registerExc<Imath::NullVecExc,Iex::MathExc>("NullVecExc","imath");

<
PyIex::registerExc<Imath::NullQuatExc,Iex::MathExc>("NullQuatExc","imath");

<
PyIex::registerExc<Imath::SingMatrixExc,Iex::MathExc>("SingMatrixExc","imath");

<
PyIex::registerExc<Imath::ZeroScaleExc,Iex::MathExc>("ZeroScaleExc","imath");

<
PyIex::registerExc<Imath::IntVecNormalizeExc,Iex::MathExc>("IntVecNormalizeExc","imath");

---

>
PyIex::registerExc<Imath::NullVecExc,Iex::BaseExc>("NullVecExc","iex");

>
PyIex::registerExc<Imath::NullQuatExc,Iex::BaseExc>("NullQuatExc","iex");

>
PyIex::registerExc<Imath::SingMatrixExc,Iex::BaseExc>("SingMatrixExc","iex");

>
PyIex::registerExc<Imath::ZeroScaleExc,Iex::BaseExc>("ZeroScaleExc","iex");

>
PyIex::registerExc<Imath::IntVecNormalizeExc,Iex::BaseExc>("IntVecNormalizeExc","iex");

This way I can import imath, and in python land I
can see that the imath module contains the
registered exceptions and I can raise/try/catch them. but
this code change seems fishy since nothing else seems to
have reported and the code in the latest version remains the
same.

I saw someone else did the same change (back in 2012)
https://groups.google.com/forum/#!searchin/alembic-discussion/Cannot$20build$20windows/alembic-discussion/OMOvhg0Nv7o/VnJRrByVv10J

but I'm pretty sure I am missing something more obvious

also it caught my attention that I get this warning on gdb

PyIex::TypeTranslator<Iex_2_0::BaseExc>::findClassDesc<Iex_2_0::MathExc>

(this=0x6e6510, cd=0x6eaa00) at
/scratch/federicon/git/rezExternalPackages/pyilmbase/2.0.0/build/2/pyilmbase-prefix/src/pyilmbase/PyIex/Py

IexTypeTranslator.h:262

(gdb) print cd->typeInfo()

warning: RTTI symbol not found for class
'PyIex::TypeTranslator<Iex_2_0::BaseExc>::ClassDescT<Iex_2_0::BaseExc>'

could it be related to the realtime type info? I made
sure that ilmbase and pyilmbase were compiled wihout the
-fno-rtti so it should be on by default

Hope someone can help me find the issue

Thanks in advance

Fede

_______________________________________________
Openexr-devel mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/openexr-devel

_______________________________________________
Openexr-devel mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/openexr-devel
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.