Excepciones a través del límite binario

Lo sé, esta pregunta se ha planteado varias veces, sin embargo no puedo encontrar una solución para mi problema.

Tengo la siguiente situación:

   A
  / \
 /   \
B <-- C
A es una biblioteca compartida que contiene la claseEExceptionB y C enlazan contra AC es una biblioteca compartida tambiénB carga dinámicamente C en tiempo de ejecución

En algún punto C lanza una instancia deEException:

void doSometing() {
    throw EException("test-message");
}

enB Me gustaría atrapar esta excepción:

try {
    doSomething();
} catch (const EException& ex) {
    // Not reached
} catch (...) {
    // Not reached
}

pero como se menciona en el código, ninguna de las cláusulas catch es llamada. En cambio, el hilo, este código se ejecuta en, se aborta.

Probé las siguientes cosas:

El atributo de visibilidad deEException se establece en "predeterminado" al compilar AlosEException el archivo de encabezado contiene solo declaracionesEstoy usando la opción de enlazador-fvisibility=hidden en A, B y CEstoy usando la opción de enlazador-E Cía

Utilizandonm Lo consigo porA:

0000000000066260 T EException::EException(QString const&)
0000000000066306 T EException::EException(EException const&)
00000000000661d0 T EException::EException() 
0000000000066260 T EException::EException(QString const&) 
0000000000066306 T EException::EException(EException const&) 
00000000000661d0 T EException::EException() 
00000000000664de T EException::~EException()
000000000006641e T EException::~EException() 
000000000006641e T EException::~EException() 
00000000000663b6 T EException::operator=(EException const&)
<...>
000000000028de40 V typeinfo for EException
000000000028dd80 V typeinfo for EException*
000000000007342b V typeinfo name for EException
0000000000072ab7 V typeinfo name for EException*
000000000028de00 V vtable for EException

paraB:

U EException::EException(QString const&)
U EException::~EException()
<...>
0000000000726f60 V typeinfo for EException

y paraC:

U EException::EException(QString const&)
U EException::~EException()
<...>
U typeinfo for EException

¿Podría ser el problema, queB utiliza su propia información de tipo deEException, mientrasC utiliza el proporcionado porA? ¿Cómo arreglaría esto?

Mi entorno:

gcc 4.6.3 en x86_64-linux-gnuusando Qt

¡Gracias por tu ayuda!

Respuestas a la pregunta(5)

Su respuesta a la pregunta