GCC 4.9.1 编译在 RHEL 6.0 上失败,"libsanitizer"中出现编译错误

GCC 4.9.1 compilation fails on RHEL 6.0 with a compilation error in "libsanitizer"

本文关键字:编译 错误 libsanitizer 失败 RHEL GCC      更新时间:2023-10-16

谁能告诉我这里出了什么问题-

libtool: compile:  /home/ritwik/build-gcc-4.9.1/./gcc/xgcc -shared-libgcc -B/home/ritwik/build-gcc-4.9.1/./gcc -nostdinc++ -L/home/ritwik/build-gcc-4.9.1/x86_64-unknown-linux-gnu/libstdc++-v3/src -L/home/ritwik/build-gcc-4.9.1/x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs -L/home/ritwik/build-gcc-4.9.1/x86_64-unknown-linux-gnu/libstdc++-v3/libsupc++/.libs -B/usr/local/x86_64-unknown-linux-gnu/bin/ -B/usr/local/x86_64-unknown-linux-gnu/lib/ -isystem /usr/local/x86_64-unknown-linux-gnu/include -isystem /usr/local/x86_64-unknown-linux-gnu/sys-include -D_GNU_SOURCE -D_DEBUG -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I. -I../../../../gcc-4.9.1/./libsanitizer/sanitizer_common -I.. -I ../../../../gcc-4.9.1/./libsanitizer/include -isystem ../../../../gcc-4.9.1/./libsanitizer/include/system -Wall -W -Wno-unused-parameter -Wwrite-strings -pedantic -Wno-long-long -fPIC -fno-builtin -fno-exceptions -fno-rtti -fomit-frame-pointer -funwind-tables -fvisibility=hidden -Wno-variadic-macros -I../../libstdc++-v3/include -I../../libstdc++-v3/include/x86_64-unknown-linux-gnu -I../../../../gcc-4.9.1/./libsanitizer/../libstdc++-v3/libsupc++ -DSANITIZER_LIBBACKTRACE -DSANITIZER_CP_DEMANGLE -I ../../../../gcc-4.9.1/./libsanitizer/../libbacktrace -I ../libbacktrace -I ../../../../gcc-4.9.1/./libsanitizer/../include -include ../../../../gcc-4.9.1/./libsanitizer/libbacktrace/backtrace-rename.h -g -O2 -D_GNU_SOURCE -MT sanitizer_platform_limits_posix.lo -MD -MP -MF .deps/sanitizer_platform_limits_posix.Tpo -c ../../../../gcc-4.9.1/./libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc  -fPIC -DPIC -o .libs/sanitizer_platform_limits_posix.o
In file included from /usr/include/features.h:361:0,
                 from /usr/include/arpa/inet.h:22,
                 from ../../../../gcc-4.9.1/./libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc:20:
/usr/include/sys/timex.h:145:31: error: expected initializer before ‘throw’
      __asm__ ("ntp_gettimex") __THROW;
                               ^
make[4]: *** [sanitizer_platform_limits_posix.lo] Error 1
make[4]: Leaving directory `/home/ritwik/build-gcc-4.9.1/x86_64-unknown-linux-gnu/libsanitizer/sanitizer_common'
make[3]: *** [all-recursive] Error 1
make[3]: Leaving directory `/home/ritwik/build-gcc-4.9.1/x86_64-unknown-linux-gnu/libsanitizer'
make[2]: *** [all] Error 2
make[2]: Leaving directory `/home/ritwik/build-gcc-4.9.1/x86_64-unknown-linux-gnu/libsanitizer'
make[1]: *** [all-target-libsanitizer] Error 2
make[1]: Leaving directory `/home/ritwik/build-gcc-4.9.1'
make: *** [all] Error 2

这个错误是在我制作gcc 4.9.1时出现的。

最近的google搜索显示:

https://gcc.gnu.org/ml/gcc/2014-02/msg00468.html

但是没有解决方案,即使他面临着完全相同的问题。

我在CentOS 6.0上有同样的问题:在试图编译GCC-4.9.3时,我得到了同样的错误。

我能够使用以下解决方案:在配置GCC时禁用libsanitizerlibcilkrts:

./configure --prefix=/home/gz/apps/gcc-4.9.3 --enable-languages=c,c++ 
    --disable-multilib --disable-libsanitizer --disable-libcilkrts

在linux/timex.h的顶部添加#include linux/time.h应该可以解决这个问题。这个问题可能是由于RHEL 6附带的gcc中的错误。这可以通过从redhat进行更新来解决。