libjvm.so no funciona correctamente si se integra en el proceso con dlopen. Debe enlazarse con el ejecutable cuando se crea ese objeto.
Solución alternativa: nombre a libjvm.so (-ljvm) y libjava.so (-ljava) como dependencias de forma explícita cuando cree un ejecutable.