Arch:GCC 安装中编译 toplev.o 失败

Arch:GCC 安装中编译 toplev.o 失败

我目前正在尝试使用 AUR 安装 gcc41,但遇到了问题。

每次执行编译过程时,构建都会失败,因为存在重新定义错误,无法完成 toplev 对象的编译。

这是错误。我真的不知道从这里该去哪里。

In file included from ../../gcc/toplev.c:31:0:
../../gcc/gcov-io.h: In function ‘gcov_position’:
../../gcc/system.h:575:55: warning: ISO C does not support ‘__FUNCTION__’ predefined identifier [-Wpedantic]
((void)(!(EXPR) ? fancy_abort (__FILE__, __LINE__, __FUNCTION__), 0 : 0))
                                                   ^
../../gcc/gcov-io.h:572:3: note: in expansion of macro ‘gcc_assert’
   gcc_assert (gcov_var.mode > 0);
   ^
../../gcc/toplev.c: At top level:
../../gcc/toplev.c:524:1: error: redefinition of ‘floor_log2’
 floor_log2 (unsigned HOST_WIDE_INT x)
 ^
In file included from ../../gcc/toplev.c:59:0:
../../gcc/toplev.h:175:1: note: previous definition of ‘floor_log2’ was here
 floor_log2 (unsigned HOST_WIDE_INT x)
 ^
../../gcc/toplev.c:559:1: error: redefinition of ‘exact_log2’
 exact_log2 (unsigned HOST_WIDE_INT x)
 ^
In file included from ../../gcc/toplev.c:59:0:
../../gcc/toplev.h:181:1: note: previous definition of ‘exact_log2’ was here
 exact_log2 (unsigned HOST_WIDE_INT x)
 ^
Makefile:2064: recipe for target 'toplev.o' failed
make[2]: *** [toplev.o] Error 1
make[2]: Leaving directory '/tmp/yaourt-tmp-michael/aur-gcc41/src/gcc-4.1.2/build/gcc'
Makefile:3907: recipe for target 'all-gcc' failed
make[1]: *** [all-gcc] Error 2
make[1]: Leaving directory '/tmp/yaourt-tmp-michael/aur-gcc41/src/gcc-4.1.2/build'
Makefile:617: recipe for target 'all' failed
make: *** [all] Error 2

答案1

gcc 4.4.7我也尝试安装较新的gcc版本。我见过和你一样的错误。根据这个错误报告,问题来自于 flag ,它成为新版本-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并更改了from中的两行

CC = gcc
CXX = g++

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

有了这个,我就不再看到错误了。

但是,我遇到了其他错误:

@itemx must follow @item

它们是由较新版本的 引起的texinfo,因此您可以使用较旧版本的texinfo。也许你也可以手动修复它们,我尝试过一个案例,但我不知道我在做什么,所以我没有遵循这条路。

长话短说,我猜你最好运行虚拟机或 docker 镜像。

答案2

我以前遇到过类似的事情。我认为问题在于您正在尝试使用 GCC 5.2.0-1(最新的 arch 版本)从 AUR 编译 gcc41。随着版本的继续,GCC 会添加新的错误,因此旧版本的 GCC 的源代码不是在较新版本的 GCC 下始终被认为是有效的。如果您能找到一种方法来禁用此警告,则可能会成功。如果您可以使用 Arch wayback 机器获取 gcc 4.2 二进制文件,则可以以二进制形式编译 gcc 4.2 源代码。

相关内容