2011-07-27 3 views
6

Al ejecutar "java -version" en BASH, se obtiene el resultado correcto. Sin embargo, cuando intento el mismo sistema mediante el comando shell_exec() desde un script PHP en Apache, recibo:Mac OS X Lion: Se produjo un error durante la inicialización de VM No se pudo cargar la biblioteca nativa: libjava.jnilib

"Se produjo un error durante la inicialización de VM No se puede cargar la biblioteca nativa: libjava.jnilib"

I He intentado todas las soluciones habituales para este problema (cambio de enlaces simbólicos, desarmado de variables env).

También estoy bastante seguro de que tanto BASH como el script están usando el mismo binario. "which java" produce el mismo resultado.

Alguna idea sobre cómo podría conseguir "java -version" para trabajar?

+1

Si está utilizando MAMP, véase: http://stackoverflow.com/questions/7650013/java -1-6-broken-when-called-by-background-symfony-task –

Respuesta

1

Puede dar a OSX una pista sobre dónde encontrar esa biblioteca estableciendo la variable de entorno DYLD_LIBRARY_PATH como parte de ese ejecutor de shell. No tiene nada que ver con que usen el mismo binario, pero si ese binario puede encontrar las bibliotecas a las que está vinculado cuando se queda sin apache. Se puede ver lo que las bibliotecas unos enlaces binarios con ejecutando:

otool -L <binary> 

Verá dónde reside libjava.jnilib y añadir ese camino a su DYLD_LIBRARY_PATH. Puede haber muchas bibliotecas para las que necesita agregar rutas.

¡Buena suerte!

Descargo de responsabilidad: Hay varios campos alrededor del uso de DYLD_LIBRARY_PATH, posiblemente puede (como muchas cosas) ser un riesgo de seguridad. Sin embargo, dado que en este caso shell_exec() se utiliza para ejecutar binarios Y lo hace sin utilizar una ruta absoluta, DYLD_LIBRARY_PATH es lo menos importante en cuanto a seguridad.

+0

he comprobado el DYLD_LIBRARY_PATH de bash y del shell_exec y están devolviendo lo mismo. No estoy seguro de si este es el culpable. –

Cuestiones relacionadas