Creación de paquetes R utilizando GCC alternativo

Los sistemas con los que trabajo tienen GCC 4.5 (experimental) en / usr / local / bin / gcc, que ha demostrado ser problemático para algunos paquetes R. En su lugar, me gustaría utilizar el sistema GCC en / usr / bin / gcc.

He intentado configurar CC y CXX en los archivos de configuración de Bash (.bashrc, .bash_profile, etc.), así como en la línea de comandos, pero aunque Bash reconoce el cambio, R no lo hace.

¿Cómo puedo hacer que R use la versión de GCC en / usr / bin en lugar de la que está en / usr / local / bin /?

Esto no está tan bien documentado (por ejemplo, no lo ubiqué en ‘R Extension’ o ‘R Admin’ ahora mismo) pero Brian Ripley lo mencionó algunas veces en las listas.

Básicamente, en el momento de comstackción R, la configuración se registra y se almacena en $R_HOME/etc/Makeconf . Una posibilidad es editar ese archivo directamente, pero es posible que no tenga privilegios de administrador o que no desee afectar a todos los demás usuarios. Entonces, mejor puede ser crear

 ~/.R/Makevars 

con entradas

 CC=gcc-4.4 CXX=g++-4.4 

además de los indicadores de optmización, etc. que desee establecer. Eso afectará todos los usos posteriores de R CMD INSTALL o R CMD check o … que ejecuta.

Otros archivos en $R_HOME/etc/ pueden $R_HOME/etc/ localmente de ~/.R/ .

Tuve un problema muy similar.

Lo que funcionó para mí fue definir un directorio de proyecto (rstudio puede hacer eso por usted), y luego agregar un archivo .Renviron que modifica el PATH y LD_LIBRARY_PATH, para incluir el directorio con el nuevo gcc. En su caso, por ejemplo, el .Renviron tendrá el siguiente aspecto:

LD_LIBRARY_PATH=/usr/local/bin/gcc/lib:/usr/local/bin/gcc/lib64:/usr/local/bin/gcc/libexec: otras rutas

PATH=/usr/local/bin/gcc/bin:/usr/local/bin: otras rutas

Verifique su ruta para ver si / usr / local / bin viene antes de / usr / bin. Si lo hace, solo asegúrese de que / usr / bin sea lo primero:

 PATH=/usr/bin:${PATH} 

(está bien si aparece / usr / bin duplicado aparece dos veces).