The problem is the way the static initializers work. If you export the
classes from a .pb.cc 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 libprotobuf.so, 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 firstname.lastname@example.org.
To unsubscribe from this group, send email to
For more options, visit this group at