在Ubuntu 16.04上编译GCC 6.1

时间:2016-06-12 15:28:40

标签: c++ ubuntu gcc

命令我使用以下命令构建GCC 6.1:

sudo apt-get -y install libmpfr-dev libgmp3-dev libgmp-dev libmpc-dev flex bison libisl-dev
wget http://nl.mirror.babylon.network/gcc/releases/gcc-6.1.0/gcc-6.1.0.tar.bz2 -O - | tar xjvf -
cd gcc-6.1.0
./configure --enable-shared --disable-checking --enable-languages=c,c++ --disable-multilib
make -j4

当尝试在Ubuntu 16.04 / x86_64上编译GCC 6.1时,我收到以下错误。

libtool: link:  /home/user/build/gcc-6.1.0/host-x86_64-pc-linux-gnu/gcc/xgcc -shared-libgcc -B/home/user/build/gcc-6.1.0/host-x86_64-pc-linux-gnu/gcc -nostdinc++ -L/home/user/build/gcc-6.1.0/x86_64-pc-linux-gnu/libstdc++-v3/src -L/home/user/build/gcc-6.1.0/x86_64-pc-linux-gnu/libstdc++-v3/src/.libs -L/home/user/build/gcc-6.1.0/x86_64-pc-linux-gnu/libstdc++-v3/libsupc++/.libs -B/usr/local/x86_64-pc-linux-gnu/bin/ -B/usr/local/x86_64-pc-linux-gnu/lib/ -isystem /usr/local/x86_64-pc-linux-gnu/include -isystem /usr/local/x86_64-pc-linux-gnu/sys-include     -fPIC -DPIC -D_GLIBCXX_SHARED -shared -nostdlib /usr/lib/x86_64-linux-gnu/crti.o /home/user/build/gcc-6.1.0/host-x86_64-pc-linux-gnu/gcc/crtbeginS.o  .libs/compatibility.o .libs/compatibility-debug_list.o .libs/compatibility-debug_list-2.o .libs/compatibility-c++0x.o .libs/compatibility-atomic-c++0x.o .libs/compatibility-thread-c++0x.o .libs/compatibility-chrono.o .libs/compatibility-condvar.o  -Wl,--whole-archive ../libsupc++/.libs/libsupc++convenience.a ../src/c++98/.libs/libc++98convenience.a ../src/c++11/.libs/libc++11convenience.a -Wl,--no-whole-archive  -L/home/user/build/gcc-6.1.0/x86_64-pc-linux-gnu/libstdc++-v3/libsupc++/.libs -L/home/user/build/gcc-6.1.0/x86_64-pc-linux-gnu/libstdc++-v3/src -L/home/user/build/gcc-6.1.0/x86_64-pc-linux-gnu/libstdc++-v3/src/.libs -lm -L/home/user/build/gcc-6.1.0/host-x86_64-pc-linux-gnu/gcc -L/lib/x86_64-linux-gnu -L/lib/../lib64 -L/usr/lib/x86_64-linux-gnu -lc -lgcc_s /home/user/build/gcc-6.1.0/host-x86_64-pc-linux-gnu/gcc/crtendS.o /usr/lib/x86_64-linux-gnu/crtn.o  -Wl,-O1 -Wl,-z -Wl,relro   -Wl,-soname -Wl,libstdc++.so.6 -o .libs/libstdc++.so.6.0.22
/usr/bin/ld: ../src/c++11/.libs/libc++11convenience.a(cow-sstream-inst.o): relocation R_X86_64_PC32 against symbol `_ZTCSt18basic_stringstreamIwSt11char_traitsIwESaIwEE16_St13basic_ostreamIwS1_E' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: Bad value
collect2: error: ld returned 1 exit status
Makefile:606: recipe for target 'libstdc++.la' failed
make[6]: *** [libstdc++.la] Error 1
make[6]: Leaving directory '/home/user/build/gcc-6.1.0/x86_64-pc-linux-gnu/libstdc++-v3/src'

问题似乎是这一行:

  

的/ usr /斌/ LD:   ../src/c++11/.libs/libc++11convenience.a(cow-sstream-inst.o):   根据符号重​​新定位R_X86_64_PC32   `_ZTCSt18basic_stringstreamIwSt11char_traitsIwESaIwEE16_St13basic_ostreamIwS1_E”   制作共享对象时不能使用;用-fPIC重新编译

它说recompile with -fPIC,但我似乎无法找到./configure标记,以确保使用libc++11convenience构建-fPIC

我一直在寻找解决方案,但找不到任何东西。此时我应该怎样做才能成功编译gcc6.1?

1 个答案:

答案 0 :(得分:0)

仔细阅读GCC install instructions。 GCC不应该在其源代码树中构建:

  

首先,我们强烈建议将GCC构建到与源树不在的源中的单独目录中。

你应该再试一次,或许像:

wget \
 http://nl.mirror.babylon.network/gcc/releases/gcc-6.1.0/gcc-6.1.0.tar.bz2 -O - \
  | tar xjvf -
mkdir Gcc6BuildTree
cd Gcc6BuildTree
../gcc-6.1.0/configure --enable-shared --disable-checking \
  --enable-languages=c,c++ --disable-multilib --program-suffix=-6
make -j4

BTW,首先尝试/usr/bin/gcc -v;这将为您提供 system 编译器的配置方式&建成。这是鼓舞人心的。

此外,我强烈建议您使用--program-suffix=(我建议您同时配置GCCJIT

您可以先尝试运行aptitude build-dep gcc-6(或gcc-5)以获得有用的依赖关系(GCC 6的依赖关系与GCC 5的依赖关系有很多共同点)。

也许你的Ubuntu已经附带了一些gcc-6?你试过aptitude install gcc-6了吗?另请参阅this answer

几周前(2016年8月)也发布了GCC 6.2。你最好建立gcc 6.2而不是gcc 6.1

另请注意,源tarball有一个contrib/download_prerequisites脚本,您可能会发现它很有用。

注意:gcc-help@gcc.gnu.org可能是提出问题的更好地方。