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