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.