编译GCC源代码时发生错误

5

我现在的Ubuntu 15.10机器上安装的gcc和g++版本是5.2.1。由于某些原因,我需要安装v4.4版本。我已经下载了gcc4.4.7的源代码,并使用以下配置:

../configure \
    --disable-checking \
    --enable-languages=c,c++ \
    --enable-multiarch \
    --enable-shared \
    --enable-threads=posix \
    --program-suffix=4.4 \
    --with-gmp=/usr/local/lib \
    --with-mpc=/usr/local/lib \
    --with-mpfr=/usr/local/lib \
    --without-included-gettext \
    --with-system-zlib \
    --with-tune=generic \
    --prefix=$HOME/bin/android_build

我收到了一个Makefile文件并尝试使用make命令,但我收到了以下两个错误:
../../gcc/toplev.c:536:1: error: redefinition of ‘floor_log2’
../../gcc/toplev.c:571:1: error: redefinition of ‘exact_log2’

那么如何解决这个问题呢?谢谢。

你解决了这个问题吗?既然一个月过去了你还没有得到答案,我猜想答案是“是的——我已经解决了这个问题,或者通过下载预编译版本来规避了这个问题”。 - Jonathan Leffler
我刚在虚拟机上安装了一个旧版本的Ubuntu。 - darklord
3个回答

7
我也试图安装gcc 4.4.7,但使用更高版本的gcc时出现了与您相同的错误。根据这个错误报告,问题出在标志-fno-gn89-inline上,它成为新版gcc中处理内联函数的默认标志。从gcc 4.3开始,默认标志是-fgnu89-inline。所以你需要做的就是在编译时设置-fgnu89-inline标志。
我已经尝试过这个方法。
CFLAGS='-fgnu89-inline -g -O2' CXXFLAGS='-fgnu89-inline -g -O2' ./configure
make

但我仍然收到相同的错误。我认为标志没有被正确地转发,但我不确定。然后我尝试了一个普通的。
./configure

并且修改了 Makefile 中的两行内容:

CC = gcc
CXX = g++

to

CC = gcc -fgnu89-inline
CXX = g++ -fgnu89-inline

有了这个,我再也没有看到错误了。

然而,我遇到了其他错误:

@itemx must follow @item

他们是由较新版本的texinfo引起的,所以你可以使用较旧的版本的texinfo。也许你还可以动手修复它们,我曾经尝试过一次,但是我不知道自己在做什么,所以我并没有继续这条路。
长话短说,我想你最好运行一个虚拟机或docker镜像。

1

尝试使用以下命令:../configure CFLAGS='-fgnu89-inline -g -O2' ...

这对我有用。


1
一点解释确实可以提升您的答案。 - Selim Yildiz

0
/*                    //toplev.h 注释下面两个函数 Annotate the following two functions
extern inline int
floor_log2 (unsigned HOST_WIDE_INT x)
{
  return x ? HOST_BITS_PER_WIDE_INT - 1 - (int) CLZ_HWI (x) : -1;
}

extern inline int
exact_log2 (unsigned HOST_WIDE_INT x)
{
  return x == (x & -x) && x ? (int) CTZ_HWI (x) : -1;
}
*/

目前你的回答不够清晰。请编辑并添加更多细节,以帮助其他人理解它如何回答所提出的问题。你可以在帮助中心找到有关如何撰写好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接