After much confusion and heartache, some google searching indicates to me that there is a problem on Solaris using threads with gcc. When applications compiled with gcc attempt to throw exceptions from within threads sometimes they do not get caught, and hence the application terminates with the message:
terminate called recursively
Ref:
http://gcc.gnu.org/ml/gcc-bugs/2007-06/msg01137.html
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32344
The current workaround for my project was to forgo threads, but one of the developers came up with the idea to link in the Solaris libc++ to avoid this problem.