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

时间:2010-09-13 07:15:10

标签: linux gcc makefile

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

4 个答案:

答案 0 :(得分:7)

您对正在使用的构建系统一无所知,但通常可以通过类似的方式显式调用旧版本的gcc(这适用于基于autotools的构建):

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

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

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

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

答案 1 :(得分:0)

如果您可以找到实际使用可写字符串的位置,则另一种可能性是在代码实际编辑的文字字符串子集上使用strdupfree。这可能比降级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";

假设您进行了这些修复,将不再需要“-fwritable-strings”。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

如果不能编辑配置/ Makefile,Linux会为这种情况包含一个名为update-alternatives的实用程序。但是,使用起来很麻烦(链接到下面的各种教程)。

这有点简单 - 这是一个脚本(来自here),可以轻松切换您的默认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