[CMake] ITK wrapping: sharing symbols across shared modules

Zachary Pincus zpincus at stanford.edu
Fri Feb 17 09:20:45 EST 2006


Hi folks,

I've been really banging my head against an issue for a day now that  
I hope someone can help me with.

As some may recall, I'm working on updating the wrapper system for  
ITK. The code is split into several shared modules, so instances  
created in one module need to work across module boundaries. (So that  
images created by filters from one module can be used by filters from  
other modules.)

This means getting C++ RTTI and dynamic casting to work across shared  
module boundaries. Right now, for me, it's broken. I'm using OS X;  
Gaetan who is working with me on this is using Linux and I don't  
think RTTI is broken for him.

I'm hoping that some of the people who worked on the original  
wrappers, or who have a deeper understanding of C++ linking, have  
some recollection of how to un-break this. Now, I'm not sure whether  
I need to have CMake do anything special when linking these modules,  
or if I need to do anything fancy when trying to load them (right  
now, in Python).

For the record, cmake is linking the modules as follows:
/usr/bin/c++ -bundle -o [output].so [object files] -L[link paths] -l 
[link libs]

I'm loading the modules with Python which (I think) uses dlopen() to  
do this. Moreover, I've set python's dlopen flags (via sys.setdlopen 
()) to RTLD_NOW|RTLD_GLOBAL (as defined in dlfcn.h on my machine), so  
I think the module symbols are getting loaded globally and  
immediately. (Other variations on the flags don't help.)

Nevertheless (and perhaps global loading doesn't help with this),  
each module has its own RTTI information for each class and uses that  
information. I'm really not sure what to do here, so any thoughts at  
all would be very welcome.


Zach Pincus

Program in Biomedical Informatics and Department of Biochemistry
Stanford University School of Medicine



More information about the CMake mailing list