The problem is the way the static initializers work.  If you export the 
classes from a file as part of a shared library (.so), their 
initializers will run every time you load the .so.   But these initializers 
need to add entries to tables which are in, and the same 
descriptor cannot be added twice.   So, anything that causes your message 
class .so to be loaded more times than the main protobuf .so is going to 
abort on a GOOGLE_CHECK at runtime.   For example, unloading and reloading 
the .so with dlopen(), or loading more than one .so module which has the 
message .so as a dependency.

(Note this is not an issue with Windows .DLL modules.)

You received this message because you are subscribed to the Google Groups 
"Protocol Buffers" group.
To view this discussion on the web visit
To post to this group, send email to
To unsubscribe from this group, send email to
For more options, visit this group at

Reply via email to