Hoy por una de esas me he visto obligado a instalar y compilar para mi Snow Leopard las librerías de “libssh” (no confundir con “libssh2”). Para mi sorpresa, o quizás no tan sorpresa a estas alturas, al lanzar la compilación daba un error en el código porque no encontraba una de las variables que utilizaba. Dicha variable era:
extern char **environ;
Buscando un poco en Google, he llegado a la conclusión de que esta variable no está disponible en sistemas MAC OS X, con lo cual me ha tocado hacerle un pequeño parche al código fuente para poder compilarlo.
El fichero que daba el error era: “libssh/socket.c“, donde podemos encontrar las dos siguientes lineas:
extern char **environ;
…
execve(args[0],(char * const *)args,(char * const *)environ);
Lo que tenemos que hacer es sustituir ese parte del código por la siguiente:
//extern char **environ;
#include <ctr_externs.h>;
…
char **__hscore_environ(void) { return (*_NSGetEnviron()); }
…
//execve(args[0],(char * const *)args,(char * const *)environ);
execve(args[0],(char * const *)args,(char * const *)__hscore_environ());
Con esto podremos compilar e instalar perfectamente. Os lo dejo aquí por si alguien tiene el mismo problema, y para que engañarnos, por que a mi seguro que para la próxima vez se me ha olvidado.
Y como final una pequeña reflexión. ¿por qué siendo MAC OS X un sistema basado en UNIX, esto pasa tan a menudo? ¿No deberían intentar mantener un poco más la homogeneidad con los sistemas *Unix? De esta forma tendrían muchísimo más software a su disposición y nos harían la vida más fácil a algunos usuarios. Nos vemos.
Fuente: GHC