pecl: configure: error: cannot run C compiled programs

El error que podemos recibir al instalar un módulo de PHP (concretamente Oauth) a través de pecl es el siguiente:

# pecl install -R /usr/lib/php oauth
WARNING: channel "pecl.php.net" has updated its protocols, use "pecl channel-update pecl.php.net" to update
downloading oauth-1.1.0.tgz ...
Starting to download oauth-1.1.0.tgz (44,731 bytes)
............done: 44,731 bytes
6 source files, building
running: phpize
Configuring for:
PHP Api Version:         20041225
Zend Module Api No:      20060613
Zend Extension Api No:   220060519
building in /var/tmp/pear-build-root/oauth-1.1.0
running: /usr/lib/php/root/tmp/pear/oauth/configure
checking for egrep... grep -E
checking for a sed that does not truncate output... /bin/sed
checking for cc... cc
checking for C compiler default output file name... a.out
checking whether the C compiler works... configure: error: cannot run C compiled programs.
If you meant to cross compile, use `--host'.
See `config.log' for more details.
ERROR: `/usr/lib/php/root/tmp/pear/oauth/configure' failed

El error nos indica que no podemos ejecutar la compilación, en este caso es debido a que tenemos securizada la partición /tmp y no permitimos la ejecución en ella, pecl compila ahí de forma temporal el módulo.

# mount | grep ^/tmp
/tmp on /var/tmp type ext3 (rw,noexec,nosuid,bind)

Lo que vamos a hacer es una solución temporal, montamos /tmp con los requerimientos para poder hacer la compilación y después revertimos el cambio:

# mount -o remount,exec,suid /tmp
# pecl install -R /usr/lib/php oauth
# mount -o rw,noexec,nosuid,bind /tmp

Otra opción más segura y que evita tener que modificar el sistema de archivos /tmp es la que Santi nos ofrece en su comentario, exportamos la variable TMP a un lugar dentro de una partición con exec permitido e instalamos:

# mkdir -p /root/temporal
# export TMP=/root/temporal
# pecl install oauth

4 comentarios en “pecl: configure: error: cannot run C compiled programs

  1. Hola Alex,

    Si quieres evitar modificar las opciones de seguridad de /tmp, aunque sea temporalmente y durante apenas unos segundos, un tip podría ser exportar la variable TMP a otro directorio sobre un sistema de ficheros que no tenga la opción noexec habilitada, / por ejemplo:

    mkdir -p /root/temporal
    export TMP=/root/temporal
    pecl install oauth

    Saludos,

  2. Hola. utilizando la solucion de Santi no me funciono, mi error es similar, pero yo intento instalar

    pecl install ssh2 http://pecl.php.net/get/ssh2-0.11.3.tgz

    checking whether the C compiler works… configure: error: cannot run C compiled programs.
    If you meant to cross compile, use `–host’.
    See `config.log’ for more details.
    ERROR: `/root/tmp/pear/ssh2/configure –with-ssh2′ failed

    y ya aplique el exportar el tmp a otra carpeta

    alguna otra opción?

Comments are closed.