我已经尝试了几种方法在我的 PC 上构建和安装 gcc-5.4.0;
我运行了这个代码:
GCC_VERSION="5.4.0"
WORKDIR="$HOME/src/"
INSTALLDIR="/platform"
cd $WORKDIR
wget http://www.netgull.com/gcc/releases/gcc-${GCC_VERSION}/gcc-${GCC_VERSION}.tar.bz2
tar -xf gcc-${GCC_VERSION}.tar.bz2
cd gcc-${GCC_VERSION}
./contrib/download_prerequisites
cd ..
mkdir gcc-build
cd gcc-build
../gcc-${GCC_VERSION}/configure \
--prefix=${INSTALLDIR} \
--enable-shared \
--enable-threads=posix \
--enable-__cxa_atexit \
--enable-clocale=gnu \
--enable-languages=all \
&& make \
&& make install
它不起作用;告诉我应该禁用多库。
我使用这个代码做到了:
GCC_VERSION="5.4.0"
WORKDIR="$HOME/src/"
INSTALLDIR="/platform"
cd $WORKDIR
wget http://www.netgull.com/gcc/releases/gcc-${GCC_VERSION}/gcc-${GCC_VERSION}.tar.bz2
tar -xf gcc-${GCC_VERSION}.tar.bz2
cd gcc-${GCC_VERSION}
./contrib/download_prerequisites
cd ..
mkdir gcc-build
cd gcc-build
../gcc-${GCC_VERSION}/configure \
--prefix=${INSTALLDIR} \
--enable-shared \
--enable-threads=posix \
--enable-__cxa_atexit \
--enable-clocale=gnu \
--enable-languages=all \
--disable-multilib \
&& make \
&& make install
它运行了将近半个小时,并生成了一个多达 1 GB 的目录。因此,我怀疑源文件有问题,并中断了它。
然后我尝试从其他来源下载 gcc-5.4.0。
使用以下命令进行编译:
GCC_VERSION="5.4.0"
WORKDIR="$HOME/src/"
INSTALLDIR="/platform"
cd $WORKDIR
wget http://ftpmirror.gnu.org/gcc/gcc-${GCC_VERSION}/gcc-${GCC_VERSION}.tar.bz2
tar -xf gcc-${GCC_VERSION}.tar.bz2
cd gcc-${GCC_VERSION}
./contrib/download_prerequisites
cd ..
mkdir gcc-build
cd gcc-build
../gcc-${GCC_VERSION}/configure \
--prefix=${INSTALLDIR} \
--disable-multilib \
--enable-shared \
--enable-threads=posix \
--enable-__cxa_atexit \
--enable-clocale=gnu \
--enable-languages=all \
&& make \
&& make install
我再次收到错误,您知道有什么直接的方法可以解决此问题吗?
答案1
... 运行了将近半个小时,并生成了一个 1 GB 大小的目录。所以我怀疑源文件有问题,于是中断了它。
有可能您走在正确的轨道上,并匆忙过早停止了构建。根据您的机器的强度,30 分钟对于构建 GCC 来说听起来并不算不合理。最重要的是,您正在使用 进行构建make
,这意味着源文件是按顺序编译的,一次一个,这是 make 的默认设置。为了显著加快构建速度,请运行make -j
,它将使用所有 CPU 核心并行构建,或者make -j4
运行 4 个并行编译作业,例如。
至于构建大小,我怀疑默认情况下,GCC 以调试模式构建,这可以解释臃肿的构建文件夹(相比之下,LLVM 调试构建很容易堆叠到 > 4GB)。
但是,如果您不必从源代码构建自己的 GCC 副本,则可以使用 Launchpad 上提供的预构建的 5.4 软件包。
对于 GCC(仅限 C),获取 .deb 文件并按顺序安装它们:
mkdir ~/Downloads/gcc-5.4-deb && cd ~/Downloads/gcc-5.4-deb
wget http://launchpadlibrarian.net/375474546/gcc-5-base_5.4.0-6ubuntu1~16.04.10_amd64.deb
wget http://launchpadlibrarian.net/375474798/libasan2_5.4.0-6ubuntu1~16.04.10_amd64.deb
wget http://launchpadlibrarian.net/375474828/libmpx0_5.4.0-6ubuntu1~16.04.10_amd64.deb
wget http://launchpadlibrarian.net/375474805/libgcc-5-dev_5.4.0-6ubuntu1~16.04.10_amd64.deb
wget http://launchpadlibrarian.net/375474748/cpp-5_5.4.0-6ubuntu1~16.04.10_amd64.deb
wget http://launchpadlibrarian.net/375474755/gcc-5_5.4.0-6ubuntu1~16.04.10_amd64.deb
sudo dpkg -i gcc-5-base_5.4.0-6ubuntu1~16.04.10_amd64.deb
sudo dpkg -i libasan2_5.4.0-6ubuntu1~16.04.10_amd64.deb
sudo dpkg -i libmpx0_5.4.0-6ubuntu1~16.04.10_amd64.deb
sudo dpkg -i libgcc-5-dev_5.4.0-6ubuntu1~16.04.10_amd64.deb
sudo dpkg -i cpp-5_5.4.0-6ubuntu1~16.04.10_amd64.deb
sudo dpkg -i gcc-5_5.4.0-6ubuntu1~16.04.10_amd64.deb
对于 C++ 支持,添加以下内容:
wget http://launchpadlibrarian.net/375474836/libstdc++6_5.4.0-6ubuntu1~16.04.10_amd64.deb
wget http://launchpadlibrarian.net/375474834/libstdc++-5-dev_5.4.0-6ubuntu1~16.04.10_amd64.deb
wget http://launchpadlibrarian.net/375474751/g++-5_5.4.0-6ubuntu1~16.04.10_amd64.deb
sudo dpkg -i libstdc++6_5.4.0-6ubuntu1~16.04.10_amd64.deb
sudo dpkg -i libstdc++-5-dev_5.4.0-6ubuntu1~16.04.10_amd64.deb
sudo dpkg -i g++-5_5.4.0-6ubuntu1~16.04.10_amd64.deb
请注意,降级libstdc++6
可能会导致某些软件包损坏(例如,在我的 Ubuntu 18.10cmake
上firefox
)。保留多个 libstdc++ 在技术上是可行的,但很难实现,而且肯定不是理想的选择。
答案2
除了 valiano 提到的软件包之外,我还必须安装以下软件包:
wget http://security.ubuntu.com/ubuntu/pool/main/g/gcc-5/libcilkrts5_5.4.0-6ubuntu1~16.04.10_amd64.deb
wget http://security.ubuntu.com/ubuntu/pool/main/g/gcc-5/libubsan0_5.4.0-6ubuntu1~16.04.10_amd64.deb
wget http://cz.archive.ubuntu.com/ubuntu/pool/main/i/isl/libisl15_0.16.1-1_amd64.deb
wget http://cz.archive.ubuntu.com/ubuntu/pool/main/m/mpfr4/libmpfr4_3.1.4-1_amd64.deb
答案3
新的 gcc-5 版本记录在:https://launchpad.net/ubuntu/+source/gcc-5
从那里您应该能够单击您需要的版本的其中一个构建,然后在“构建”->“amd64”(或您的架构)下您将找到相应的二进制文件。
您可能只需要下面列出的软件包:
# Taken from the build at https://launchpad.net/~ci-train-ppa-service/+archive/ubuntu/3807-deletedppa/+build/17785138
wget https://launchpad.net/~ci-train-ppa-service/+archive/ubuntu/3807-deletedppa/+build/17785138/+files/gcc-5-base_5.4.0-6ubuntu1~16.04.12_amd64.deb
wget https://launchpad.net/~ci-train-ppa-service/+archive/ubuntu/3807-deletedppa/+build/17785138/+files/libasan2_5.4.0-6ubuntu1~16.04.12_amd64.deb
wget https://launchpad.net/~ci-train-ppa-service/+archive/ubuntu/3807-deletedppa/+build/17785138/+files/libmpx0_5.4.0-6ubuntu1~16.04.12_amd64.deb
wget https://launchpad.net/~ci-train-ppa-service/+archive/ubuntu/3807-deletedppa/+build/17785138/+files/libcilkrts5_5.4.0-6ubuntu1~16.04.12_amd64.deb
wget https://launchpad.net/~ci-train-ppa-service/+archive/ubuntu/3807-deletedppa/+build/17785138/+files/libubsan0_5.4.0-6ubuntu1~16.04.12_amd64.deb
wget https://launchpad.net/~ci-train-ppa-service/+archive/ubuntu/3807-deletedppa/+build/17785138/+files/libgcc-5-dev_5.4.0-6ubuntu1~16.04.12_amd64.deb
wget https://launchpad.net/~ci-train-ppa-service/+archive/ubuntu/3807-deletedppa/+build/17785138/+files/cpp-5_5.4.0-6ubuntu1~16.04.12_amd64.deb
wget https://launchpad.net/~ci-train-ppa-service/+archive/ubuntu/3807-deletedppa/+build/17785138/+files/gcc-5_5.4.0-6ubuntu1~16.04.12_amd64.deb
# These two are taken from DannyDahan's solution. A newer version from launchpad may have worked aswell
wget http://cz.archive.ubuntu.com/ubuntu/pool/main/i/isl/libisl15_0.16.1-1_amd64.deb
wget http://cz.archive.ubuntu.com/ubuntu/pool/main/m/mpfr4/libmpfr4_3.1.4-1_amd64.deb
dpkg -i gcc-5-base_5.4.0-6ubuntu1~16.04.12_amd64.deb
dpkg -i libcilkrts5_5.4.0-6ubuntu1~16.04.12_amd64.deb
dpkg -i libubsan0_5.4.0-6ubuntu1~16.04.12_amd64.deb
dpkg -i libmpx0_5.4.0-6ubuntu1~16.04.12_amd64.deb
dpkg -i libisl15_0.16.1-1_amd64.deb
dpkg -i libmpfr4_3.1.4-1_amd64.deb
dpkg -i cpp-5_5.4.0-6ubuntu1~16.04.12_amd64.deb
dpkg -i libasan2_5.4.0-6ubuntu1~16.04.12_amd64.deb
dpkg -i libgcc-5-dev_5.4.0-6ubuntu1~16.04.12_amd64.deb
dpkg -i gcc-5_5.4.0-6ubuntu1~16.04.12_amd64.deb
答案4
当软件包已经有半 GB 时,解压源时它就是一 GB。
但是--disable-multilib
在构建 C/C++ 编译器时 switch 是没有意义的。
错误消息禁用多库意思是:无法构建 32 位程序集,因为缺少 32 位glibc
库。我昨天遇到了这个问题,需要安装yum install glibc-devel.i686
。在 Ubuntu Linux 上,这应该是apt-get install glibc-dev.i386
或可能是libc6-dev-i386
。只需手动提供它所依赖的包,或者修复该(可能过时的)./contrib/download_prerequisites
shell 脚本以包含该包。
否则,您最终会得到一个无法构建的编译器x86
,而只能构建x86_64
。