现在我的 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’
那么如何解决这个问题呢?谢谢。
最佳答案
我也尝试使用更新的 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 镜像。
关于gcc - 从源代码编译 gcc 时发生错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34569458/