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: al crear un ejecutable, indique explícitamente que libjvm.so (-ljvm) y libjava.so (-ljava) son dependencias.