gcc - 从源代码编译 gcc 时发生错误

标签 gcc g++ gcc4.4

现在我的 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/

相关文章:

c++ - ld 的奇怪警告

c - 错误 : 'uint16_t' undeclared?

c - RUN FAILED 退出值 -1 073 741 819 - 我的代码有什么问题?

c++ - 隐式转换没有警告

c - 在 gcc 编译器之前构建 binutils

c++ - 无法使用 "-std=c++11"编译 Hello World

c++ - typeid 导致不同的编译器

c++ - Eclipse:C++静态库中的C代码,由C++库引用导致 undefined reference

c++ - 有什么方法可以将 unique_ptr 插入到 C++0x/gcc 4.4.7 中的映射中)?

c++ - 源代码错误,将交叉编译器从 gcc4.9.2 降级到 gcc4.4.1 后