2016-06-12 110 views
2

命令我用下面的命令來構建GCC 6.1:在Ubuntu上編譯GCC 6.1 16.04

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 

當試圖編譯GCC 6.1在Ubuntu 16.04/x86_64的我碰到下面的錯誤。

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?

回答

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;那會給你怎樣的系統編譯器配置&內置。這是鼓舞人心的。

另外,我強烈建議使用--program-suffix=(我建議還配置GCCJIT

,你可能首先嚐試運行aptitude build-dep gcc-6(或gcc-5)來獲得有用的依賴關係(海合會6依賴性有多大常見於GCC 5的依賴關係)。

也許你的Ubuntu已經有一些gcc-6?你試過aptitude install gcc-6嗎?另請參閱this answer

另外GCC 6.2幾周前發佈(2016年8月)。你會更好地構建gcc 6.2而不是gcc 6.1

還要注意源代碼包中有一個contrib/download_prerequisites腳本,您可能會發現它很有用。

注意:[email protected]可能是一個更好的地方問你的問題。