如何在Linux中使用gcc的旧版本

在Linux中,我试图编译使用-fwritable-strings选项的东西。 显然这是一个gcc选项,在新版本的gcc中不起作用。 我在我的系统上安装了gcc-3.4,但我认为新版本仍然在使用,因为我仍然得到错误,说它无法识别命令行选项-fwritable-strings。 我怎样才能使用旧版本的gcc?

Solutions Collecting From Web of "如何在Linux中使用gcc的旧版本"

你对所使用的构建系统一无所知,但通常可以通过类似于(这是用于基于自动工具的构建)的东西显式地调用旧版本的gcc:

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

对于基于make的构建系统,有时候这样做会起作用:

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

大多数makefile文件都应该以这种方式来识别覆盖CCCXX

也许你可以在编译你的程序的时候给出gcc-3.4安装的完整路径:/path_to_gcc_3.4/gcc your_program

如果您可以找到可写字符串实际正在使用的位置,则另一种可能性是使用strdup并释放代码实际正在编辑的字符串子集。 这可能比降级GCC版本更复杂,但会使代码更便携。

编辑
针对下面的澄清问题/评论,如果您看到类似以下内容的内容:

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

你会用类似的东西替换上面的:

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

以前你曾经有过的地方:

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

你可以用上面的替换:

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

假设你做了这些修复,“ – 可擦写字符串”将不再是必要的。

如果不能编辑配置/ Makefile,Linux会为这种情况提供一个名为update-alternatives的工具。 然而,这是一个痛苦的使用(链接到下面的各种教程)。

这是一个简单的 – 这里是一个脚本(从这里 )轻松地切换默认的gcc / g++版本:

 #!/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 

如果你1)把这个脚本命名为switch-gcc ,2)把它放在你的路径中,3)使它可执行( chmod +x switch-gcc ),然后你可以通过运行

sudo switch-gcc 3.2

进一步阅读update-alternatives