从源代码编译gcc时出错

9w11ddsr  于 2023-01-09  发布在  其他
关注(0)|答案(3)|浏览(246)

现在我的ubuntu15.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’

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

laik7k3q

laik7k3q1#

我也试着用新的gcc版本安装gcc 4.4.7。我看到了和你一样的错误。根据this bug report,问题来自标志-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++

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

有了这个,我再也看不到错误了。
但是,我遇到了其他错误:

@itemx must follow @item

这些问题是由较新版本的texinfo引起的,所以你可以使用较旧版本的texinfo。也许你也可以手动修复它们,我尝试过一次,但我不知道我在做什么,所以我没有遵循这条路径。
长话短说,我猜运行虚拟机或Docker映像会更好。

hi3rlvi2

hi3rlvi22#

尝试../configure CFLAGS='-fgnu89-inline -g -O2' ...
对我很有效。

56lgkhnf

56lgkhnf3#

/*                    //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;
}
*/

相关问题