编译gcc 4.8.5

时间:2018-01-05 12:54:06

标签: linux gcc compiler-errors redhat

我试图在Red Hat 6下编译gcc 4.8.5。这是我的程序:

tar -xvzf archive.tar.gz

cd gcc-4.8.5

./configure --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release \
--with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object \
--enable-languages=fortran,c --prefix=/opt/gcc4.8.5

make

然后我收到以下错误:

make  all-am
make[4]: Entering directory `/app/gfortran_build/gcc-4.8.5/host-x86_64-unknown-linux-gnu/lto-plugin'
/bin/sh ./libtool --tag=CC --tag=disable-static  --mode=link gcc -Wall -g  -module -bindir /opt/gcc4.8.5/libexec/gcc/x86_64-unknown-linux-gnu/4.8.5   -o 
liblto_plugin.la -rpath /opt/gcc4.8.5/libexec/gcc/x86_64-unknown-linux-gnu/4.8.5 lto-plugin.lo -Wc,../libiberty/pic/libiberty.a
libtool: link: gcc -shared  .libs/lto-plugin.o    ../libiberty/pic/libiberty.a   -Wl,-soname -Wl,liblto_plugin.so.0 -o .libs/liblto_plugin.so.0.0.0
/usr/bin/ld: ../libiberty/pic/libiberty.a(simple-object-coff.o): relocation R_X86_64_PC32 against undefined symbol `simple_object_set_big_16' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: Bad value
collect2: ld returned 1 exit status

我已经阅读了CFLAGS,但我不会让它发挥作用。

亲切的问候

2 个答案:

答案 0 :(得分:1)

GCC 记录需要在其源代码树的外部构建;请参阅其configuring chapter文档的installation

  

首先,我们强烈建议将GCC构建到与源树中不存在的源的单独目录中。这是我们通常构建GCC的方式;建造srcdir == objdir应该仍然有效,但没有得到广泛的测试;不支持将objdir作为srcdir子目录的构建。

因此您需要根据该规则构建它。因此你的GCC构建:

cd gcc-4.8.5
#wrong code from the original question! Don't use that
./configure --enable-bootstrap --enable-shared \
      --enable-threads=posix --enable-checking=release \
      --with-system-zlib --enable-__cxa_atexit \
      --disable-libunwind-exceptions --enable-gnu-unique-object \
      --enable-languages=fortran,c --prefix=/opt/gcc4.8.5

错误;我建议至少:

  cd gcc-4.8.5
  mkdir ../_BuildGCC
  cd ../_BuildGCC
  ../gcc-4.8.5/configure --enable-bootstrap --enable-shared \
      --enable-threads=posix --enable-checking=release \
      --with-system-zlib --enable-__cxa_atexit \
      --disable-libunwind-exceptions --enable-gnu-unique-object \
      --enable-languages=fortran,c --prefix=/opt/gnu \
      --program-suffix=-mine

然后,在整个构建之后,可能与

 make -j4

后跟一些具有适当用户和权限的mkdir /opt/gnu,然后(在同一个_BuildGCC中)

make install DESTDIR=/tmp/gccinst

并最终cp -vr /tmp/gccinst/opt/gnu /opt/gnu正确运行(也许作为root ....,也许cp -va

然后您要将/opt/gnu/bin/添加到PATH variable,然后使用gcc-mine来编译代码。

BTW,GCC与C程序兼容,因为ABI不会改变。 GCC 4.8 已过时且不受支持。您最好从源代码编译支持的版本(在gcc.gnu.org上列出;在2018年1月,GCC 7.2& GCC 6.4

也许您的特定Redhat系统需要将附加/特定CFLAGS 附加到您的configure命令中。您可以询问Redhat支持,或尝试在CFLAGS=-fPIE命令的末尾添加CFLAGS=-fPIC../gcc-4.8.5/configure

最后,您可能会在gcc-help@gcc.gnu.org上得到这样的帮助,但您最好尝试使用最近的GCC。很少有GCC人记得4.8 ....

如果您确实需要精确 GCC 4.8(但我怀疑),如果需要,您可以购买昂贵的支持(例如来自RedHat或AdaCore人员)。

通过Google,我找到了Installing gcc 4.8 and Linuxbrew on CentOS 6

答案 1 :(得分:0)

它适用于以下内容:

../gcc-4.8.5/configure CC="/opt/gcc4.5/bin/gcc" --prefix=/opt/gcc4.8.5 --enable-languages=c,c++,fortran --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object

有趣的部分是CC = ...

已安装的gcc-version为4.4。使用此版本,编译失败。

亲切的问候