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: asigne los nombres libjvm.so (-ljvm) y libjava.so (-ljava) explícitamente como dependencias cuando cree un ejecutable.