【发布时间】:2018-01-05 12:54:05
【问题描述】:
我正在尝试在 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 的信息,但我不会让它发挥作用。
亲切的问候
【问题讨论】:
-
另外,阅读installing GCC。您不能在其源代码树中构建 GCC,您的构建树应该在源代码树之外。你的
--prefix应该是一些/opt/gnu,它不是特定于GCC(然后你将/opt/gnu/bin/添加到你的$PATH) -
不幸的是,一些特定的应用程序需要 gcc 4.8.5。我在这个系统上编译 gcc 的第三个版本。我不明白您的第二条评论:源代码在 /app/gfortran_build/ 下提取,前缀路径为 /opt/gcc4.8.5
-
不,大多数应用程序并不关心 GCC 的 特定 版本。他们关心ABI。很可能您的应用程序可以使用更新(而非过时)的 GCC 版本进行编译。您应该尝试使用系统的
gcc进行编译;在不太可能的情况下,您确实需要那个 GCC 版本——我认为情况并非如此,除非您需要一些特定的 GCC plugin-,否则您应该(在几段中)解释原因。 -
... 而 C 程序的 ABI 多年来一直没有改变;对于 C++,它确实很少改变(每隔几年一次)。所以你应该激发你为什么需要那个特定的版本。最后,从源代码构建 GCC 更像是系统管理员任务而不是开发人员任务;那么你最好在Unix&Linux 上询问并提供更多详细信息
标签: linux gcc compiler-errors redhat