【ai全栈】不同平台下gcc编译安装
本文的目标是安装2010年发布的GCC 4.4.5版本,这是因为很多OJ平台还是沿用这个老版本,方便线下测试代码。
GCC 4.8.1是第一个完整包含2011 C++标准的版本,编译时候通过-std=c++11来设置flag支持C++ 11标准。
linux
linux下编译安装可以灵活配置,具体可以参考GNU主页上的教程。如果想要快速安装直接参考这篇官方wiki。
编译技巧:
- 通过make -j x来设置多线程编译提升速度,不然巨慢!
- 为了方便编译错误后重新编译,不在gcc源码下编译,在外面新建一个文件夹,进入这个新建的文件夹编译:
../gcc-4.4.5/configure --prefix=$HOME/GCC-4.4.5 --enable-languages=c,c++,fortran
依赖问题:
- 编译报错很有可能是未解决的prerequire依赖。已知必须解决的依赖包括
- The GNU Multiple Precision Arithmetic Library(GMP)
- The GNU MPFR Library(MPFR)
- MPC Library(MPC)
- 已知gcc 4.6.2或较高版本gcc源码分发包含
./contrib/download_prerequisites
工具用于在编译前下载依赖。以GMP为例,通过该工具在gcc源码下产生gmp
文件夹,在编译gcc时候便可以动态链接gmp里面的源文件和头文件。实际上download_prerequisites
就是一个sh脚本,下载并链接三个重要的依赖库,其内容粘贴如下:#! /bin/sh # Download some prerequisites needed by gcc. # Run this from the top level of the gcc source tree and the gcc # build will do the right thing. # # (C) 2010 Free Software Foundation # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see http://www.gnu.org/licenses/. MPFR=mpfr-2.4.2 GMP=gmp-4.3.2 MPC=mpc-0.8.1 wget ftp://gcc.gnu.org/pub/gcc/infrastructure/$MPFR.tar.bz2 || exit 1 tar xjf $MPFR.tar.bz2 || exit 1 ln -sf $MPFR mpfr || exit 1 wget ftp://gcc.gnu.org/pub/gcc/infrastructure/$GMP.tar.bz2 || exit 1 tar xjf $GMP.tar.bz2 || exit 1 ln -sf $GMP gmp || exit 1 wget ftp://gcc.gnu.org/pub/gcc/infrastructure/$MPC.tar.gz || exit 1 tar xzf $MPC.tar.gz || exit 1 ln -sf $MPC mpc || exit 1 rm $MPFR.tar.bz2 $GMP.tar.bz2 $MPC.tar.gz || exit 1
- 对于gcc 4.4.5,虽然没有
download_prerequisites
脚本,但是可以把4.6.2的对应文件拷过来运行,如果连接ftp://gcc.gnu.org/
太慢的话可以依据脚本自行下载(推荐IDM)对应的依赖库版本。切记in-tree build只接受download_prerequisites
脚本安装的依赖库版本。
Windows
Windows下Cygwin等平台提供了binary,可以直接安装,但是不方便灵活选择版本,比如我想要gcc 4.4.5,但是在Cygwin下找不到。
Windows 10 WSL Ubuntu 20.04
Windows10下另一个好的替代方案是在WSL下载安装,不管是哪个linux发行版,通过编译安装即可,可以灵活选择自己的版本。
我的WSL是Ubuntu 20.04发行版,预装gcc是9.3。0,尝试手动编译gcc 4.4.5未能成功。
编译问题:
黔驴技穷,对于Ubuntu,可以尝试apt软件源安装。
Ubuntu
Ubuntu的apt软件源提供了低版本的gcc,需要手动添加对应的apt仓库后安装
sudo add-apt-repository 'deb http://archive.ubuntu.com/ubuntu/ trusty main'
sudo add-apt-repository 'deb http://archive.ubuntu.com/ubuntu/ trusty universe'
sudo apt install gcc-4.4
这种方式安装的gcc版本是4.4.7,勉强算是解决问题,而且方便快捷。
jadymayor@jadymayor-station:/mnt/c/Windows/System32$ gcc-4.4 -v
Using built-in specs.
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.4.7-8ubuntu1' --with-bugurl=file:///usr/share/doc/gcc-4.4/README.Bugs --enable-languages=c,c++,fortran --prefix=/usr --program-suffix=-4.4 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.4 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --disable-libmudflap --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 4.4.7 (Ubuntu/Linaro 4.4.7-8ubuntu1)
MacOS
较新的Mac Xcode下默认有gcc,但实际上是clang。
如果想要安装真的gcc,可以通过homebrew安装编译好的二进制包。homebrew官网上查询显示支持catalina的最低gcc版本是6.5,所以想要灵活安装低版本gcc也存在问题,比如4.4.5。
MacPorts也是一个不错的选择,但是catalina下安装较低版本也存在困难。
准备尝试在Mac下自己编译安装gcc44版本,然后回来填坑。