我正在使用 Ubuntu 10.04,系统中安装的 GCC 当前版本是 4.4。出于某些特定需求,我想安装 GCC 3.2。
我从以下步骤开始:
$mkdir gcc-build
$cd gcc-build
$tar zxvf gcc-3.2.tar.gz
$mkdir -p gcc-bin
$mkdir -p usr/local
$cd gcc-bin
$../gcc-build/gcc-3.2/configure --prefix=../gcc-build/usr/local
配置成功。但是当我使用下面的命令时
$make bootstrap
我收到错误
../gcc-build/gcc-3.2/gcc/read-rtl.c:653: error: lvalue required as increment operand
make[1]: *** [read-rtl.o] Error 1
make[1]: Leaving directory `../gcc-build/gcc-bin/gcc'
make: *** [all-gcc] Error 2
有谁能帮我解决这个错误吗?或者请建议一些其他方法。谢谢。
答案1
这是一个极其黑客根据 SM Ryan 在 comp.lang.c 中的建议,修复了 cast-as-lvalue 的丢失问题。
在文件顶部附近添加
#define LV(type,lvalue) (*((type*)((void*)(&lvalue))))
现在,将强制类型转换替换为LV(...)
以下示例中的转换(来自 gdb 的obstack.h
):
在第 428 行,更改
*((void **)__o->next_free)++ = ((void *)datum);
到
*(LV(void**, __o->next_free))++ = ((void *)datum);
同样,在第 436 行更改
*((int *)__o->next_free)++ = ((int)datum);
到
*(LV(int*, __o->next_free))++ = ((int)datum);
祝你好运。
答案2
经过几次尝试,我找到了一个解决方案。
我添加了以下镜像/etc/apt/sources.list
deb http://snapshot.debian.org/archive/debian/20070730T000000Z/ lenny main
deb-src http://snapshot.debian.org/archive/debian/20070730T000000Z/ lenny main
deb http://snapshot.debian.org/archive/debian-security/20070730T000000Z/ lenny/updates main
deb-src http://snapshot.debian.org/archive/debian-security/20070730T000000Z/ lenny/updates main
使用这些镜像,我可以使用以下方法安装 GCC 3.3(但不能安装 GCC 3.2)
$sudo apt-get install g++-3.3
不要忘记执行$sudo apt-get update
上述命令之前的操作。
它确实满足了我的需求。要使用 GCC 3.3 运行该程序,请执行以下操作
$gcc-3.3 input_file
因为否则如果你输入,$gcc input_file
它将使用默认的 GCC(在我的情况下是 GCC 4.4)来编译程序。我们可以通过简单地创建你想要标记到命令的版本的硬链接来更改所需版本的使用方式gcc
。我们可以执行以下操作
$cd /usr/bin
$sudo ln gcc-3.3 gcc
所以现在无论你输入什么,$gcc input_file
它都会使用你想要的 gcc 版本来编译程序。
答案3
我曾经遇到过类似的问题。我有一个模块“r8169”,它没有从我的有线连接接收数据包。然后我不得不从源代码构建上一个模块“r8168”。这给了我和你类似的错误。
一个可能的解决方法是进入超级用户模式。输入
sudo su
然后输入您的密码。控制台将显示“#”而不是“$”来输入命令。然后再次尝试您的命令。
#mkdir gcc-build
#cd gcc-build
#tar zxvf gcc-3.2.tar.gz
#mkdir -p gcc-bin
#mkdir -p usr/local
#cd gcc-bin
#../gcc-build/gcc-3.2/configure --prefix=../gcc-build/usr/local
# make bootstrap
(以及任何其他命令,如果还有的话)。希望它能起作用。