2010-09-13 17 views
7

En Linux estoy intentando compilar algo que usa la opción -fwritable-strings. Aparentemente esta es una opción de gcc que no funciona en la versión más nueva de gcc. Instalé gcc-3.4 en mi sistema, pero creo que la versión más reciente todavía se está utilizando porque aún recibo el error que dice que no puede reconocer la opción de línea de comando -fwritable-strings. ¿Cómo puedo hacer que use la versión anterior de gcc?Cómo usar una versión anterior de gcc en Linux

Respuesta

0

Si puede encontrar dónde se están utilizando las cadenas de escritura, otra posibilidad sería usar strdup y free en el subconjunto de cadenas de caracteres literales que el código está editando realmente. Esto podría ser más complicado que degradar versiones de GCC, pero hará que el código sea mucho más portátil.

Editar
En respuesta a la pregunta de clarificación/comentario a continuación, si usted vio algo como:

char* str = "XXX"; 
str[1] = 'Y'; 
str[2] = 'Z'; 
// ... use of str ... 

Se podría sustituir a la anterior con algo como:

char* str = strdup("XXX"); 
str[1] = 'Y'; 
str[2] = 'Z'; 
// ... use of str ... 
free(str); 

Y dónde usted tuvo previamente:

char* str = "Some string that isn't modified"; 

debería reemplazar lo anterior con:

const char* str = "Some string that isn't modified"; 

Suponiendo que usted hizo estas soluciones, ya no sería necesario "-fwritable-strings".

+0

¿Cómo funciona eso? ¿Puede dar un ejemplo? –

0

Tal vez usted podría dar toda la trayectoria de la gcc-3.4 instalar durante la compilación de su programa: /path_to_gcc_3.4/gcc your_program

+0

No es mi programa. Estoy usando make. –

+0

Trate de añadir esta línea al Makefile: CC =/path_to_gcc_3.4/gcc –

7

Usted dice nada sobre el sistema de construcción en uso, pero por lo general las versiones antiguas de gcc se puede invocar de forma explícita, por algo así como (esto es para una construcción basada en autotools):

./configure CXX=g++-3.4 CC=gcc-3.4 

para un sistema de construcción a base de maquillaje, a veces esto funcionará:

make CXX=g++-3.4 CC=gcc-3.4 

La mayoría de los archivos MAKE deben reconocer la anulación de CC y CXX de esta manera.

+0

no creo que va a funcionar porque el archivo de configuración se encuentra a sólo unas pocas declaraciones y no hace nada. –

+1

Bueno, entonces probablemente no esté construido con autotools. Si nos dio más detalles, podríamos ayudarlo. –

+0

Este chico probablemente sea golpeado varias veces el próximo año, ya que la última actualización a Ubuntu 11.04 y gcc-4.5.2 rompe gcc. Tuve que hacer esto para obtener gst-ffmpeg para compilar. Tenía que hacer algo como. ./configure --prefix =/usr CC = gcc-4.4. Para ayudar a las búsquedas, encuentre este enlace. aquí está el error del compilador: –

0

Si editar la configuración/Makefile no es una opción, Linux incluye una utilidad llamada update-alternatives para tales situaciones. Sin embargo, es un dolor de usar (enlaces a varios tutoriales incluidos a continuación).

Esto es un poco más simple - aquí está un script (de here) para cambiar fácilmente su defecto gcc/g++ versión:

#!/bin/bash 
usage() { 
     echo 
     echo Sets the default version of gcc, g++, etc 
     echo Usage: 
     echo 
     echo " gcc-set-default-version <VERSION>" 
     echo 
     exit 
} 
cd /usr/bin 
if [ -z $1 ] ; then 
     usage; 
fi 
set_default() { 
     if [ -e "$1-$2" ] ; then 
       echo $1-$2 is now the default 
       ln -sf $1-$2 $1 
     else 
       echo $1-$2 is not installed 
     fi 
} 
for i in gcc cpp g++ gcov gccbug ; do 
     set_default $i $1 
done 

Si 1) nombre de este script switch-gcc, 2) se pone en su camino y 3) que sea ejecutable (chmod +x switch-gcc), a continuación, puede cambiar las versiones del compilador sólo con la ejecución

sudo switch-gcc 3.2

nuevamente además ading en update-alternatives:

Cuestiones relacionadas